forked from xamarin/xamarin-macios
-
Notifications
You must be signed in to change notification settings - Fork 1
IOSurface iOS xcode9 beta1
Miguel de Icaza edited this page Jul 29, 2017
·
3 revisions
#IOSurface.framework https://github.com/xamarin/xamarin-macios/pull/2363
diff -ruN /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceBase.h /Applications/Xcode9-beta1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceBase.h
--- /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceBase.h 1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode9-beta1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceBase.h 2017-05-28 01:06:44.000000000 -0400
@@ -0,0 +1,49 @@
+/*
+ * IOSurfaceBase.h
+ * IOSurface
+ *
+ * Copyright 2006-20016 Apple, Inc. All rights reserved.
+ *
+ */
+
+#ifndef _IOSURFACE_BASE_H
+#define _IOSURFACE_BASE_H
+
+#include <sys/cdefs.h>
+
+#include <Availability.h>
+#include <TargetConditionals.h>
+
+#if !(defined(MAC_OS_X_VERSION_10_13) || defined(__IPHONE_11_0)) || defined(IOSFC_BUILDING_IOSFC)
+# define IOSFC_DEPRECATED
+# define IOSFC_DEPRECATED_MSG(s)
+# define IOSFC_IOS_DEPRECATED_MSG(s)
+# define IOSFC_AVAILABLE_STARTING(_mac,_iphone)
+# define IOSFC_AVAILABLE_BUT_DEPRECATED(_mac,_macDep,_iphone,_iphoneDep)
+# define IOSFC_CLASS_AVAILABLE(a, b)
+#else /* !defined(IOSFC_BUILDING_IOSFC) */
+# define IOSFC_DEPRECATED DEPRECATED_ATTRIBUTE
+# define IOSFC_DEPRECATED_MSG(s) DEPRECATED_MSG_ATTRIBUTE(s)
+#if TARGET_OS_EMBEDDED
+# define IOSFC_IOS_DEPRECATED_MSG(s) DEPRECATED_MSG_ATTRIBUTE(s)
+#else
+# define IOSFC_IOS_DEPRECATED_MSG(s)
+#endif
+# define IOSFC_AVAILABLE_STARTING __OSX_AVAILABLE_STARTING
+# define IOSFC_AVAILABLE_BUT_DEPRECATED __OSX_AVAILABLE_BUT_DEPRECATED
+# define IOSFC_CLASS_AVAILABLE NS_CLASS_AVAILABLE
+#endif /* !defined(IOSFC_BUILDING_IOSFC) */
+
+#if __has_feature(objc_class_property)
+#define IOSFC_SWIFT_NAME(name) __attribute__((swift_name(#name)))
+#else
+#define IOSFC_SWIFT_NAME(name)
+#endif
+
+#include <mach/kern_return.h>
+#include <CoreFoundation/CoreFoundation.h>
+#if !TARGET_OS_EMBEDDED
+#include <xpc/xpc.h>
+#endif
+
+#endif
diff -ruN /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceObjC.h /Applications/Xcode9-beta1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceObjC.h
--- /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceObjC.h 1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode9-beta1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceObjC.h 2017-05-30 01:25:49.000000000 -0400
@@ -0,0 +1,220 @@
+/*
+ * IOSurfaceObjC.h
+ * IOSurface Objective C Interface
+ *
+ * Copyright 20016 Apple, Inc. All rights reserved.
+ *
+ */
+
+#ifndef _IOSURFACE_OBJC_H
+#define _IOSURFACE_OBJC_H 1
+
+#if defined(__OBJC__)
+
+#import <IOSurface/IOSurfaceTypes.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#if !defined(NS_STRING_ENUM)
+#define NS_STRING_ENUM
+#endif
+
+typedef NSString *IOSurfacePropertyKey NS_STRING_ENUM;
+
+/* The following list of properties are used with the CFDictionary passed to IOSurfaceCreate(). */
+
+/* IOSurfacePropertyAllocSizeKey - NSNumber of the total allocation size of the buffer including all planes.
+ Defaults to BufferHeight * BytesPerRow if not specified. Must be specified for
+ dimensionless buffers. */
+extern IOSurfacePropertyKey IOSurfacePropertyAllocSizeKey IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyWidth - NSNumber for the width of the IOSurface buffer in pixels. Required for planar IOSurfaces. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyWidth IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyHeight - NSNumber for the height of the IOSurface buffer in pixels. Required for planar IOSurfaces. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyHeight IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyBytesPerRow - NSNumber for the bytes per row of the buffer. If not specified, IOSurface will first calculate
+ the number full elements required on each row (by rounding up), multiplied by the bytes per element for this surface.
+ That value will then be appropriately aligned. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyBytesPerRow IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* Optional properties for non-planar two dimensional images */
+
+/* IOSurfacePropertyKeyBytesPerElement - NSNumber for the total number of bytes in an element. Default to 1. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyBytesPerElement IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyElementWidth - NSNumber for how many pixels wide each element is. Defaults to 1. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyElementWidth IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyElementHeight - NSNumber for how many pixels high each element is. Defaults to 1. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyElementHeight IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyOffset - NSNumber for the starting offset into the buffer. Defaults to 0. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyOffset IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* Properties for planar surface buffers */
+
+/* IOSurfacePropertyKeyPlaneInfo - NSArray describing each image plane in the buffer as a CFDictionary. The CFArray must have at least one entry. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneInfo IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPlaneWidth - NSNumber for the width of this plane in pixels. Required for image planes. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneWidth IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPlaneHeight - NSNumber for the height of this plane in pixels. Required for image planes. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneHeight IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPlaneBytesPerRow - NSNumber for the bytes per row of this plane. If not specified, IOSurface will first calculate
+ the number full elements required on each row (by rounding up), multiplied by the bytes per element for this plane.
+ That value will then be appropriately aligned. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneBytesPerRow IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPlaneOffset - NSNumber for the offset into the buffer for this plane. If not specified then IOSurface
+ will lay out each plane sequentially based on the previous plane's allocation size. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneOffset IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPlaneSize - NSNumber for the total data size of this plane. Defaults to plane height * plane bytes per row if not specified. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneSize IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* Optional properties for planar surface buffers */
+
+/* IOSurfacePropertyKeyPlaneBase - NSNumber for the base offset into the buffer for this plane. Optional, defaults to the plane offset */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneBase IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPlaneBytesPerElement - NSNumber for the bytes per element of this plane. Optional, default is 1. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneBytesPerElement IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPlaneElementWidth - NSNumber for the element width of this plane. Optional, default is 1. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneElementWidth IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPlaneElementHeight - NSNumber for the element height of this plane. Optional, default is 1. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPlaneElementHeight IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* Optional properties global to the entire IOSurface */
+
+/* IOSurfacePropertyKeyCacheMode - NSNumber for the CPU cache mode to be used for the allocation. Default is kIOMapDefaultCache. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyCacheMode IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPixelFormat - NSNumber A 32-bit unsigned integer that stores the traditional Mac OS X buffer format */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPixelFormat IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* IOSurfacePropertyKeyPixelSizeCastingAllowed - If false the creator promises that there will be no pixel size casting when used on the GPU. Default is true. */
+extern IOSurfacePropertyKey IOSurfacePropertyKeyPixelSizeCastingAllowed IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+// Note: IOSurface objects are "toll free bridged" to IOSurfaceRef objects
+IOSFC_CLASS_AVAILABLE(10_12, 10_0)
+@interface IOSurface : NSObject <NSSecureCoding>
+{
+@package
+ void * _impl;
+}
+
+/* Create a new IOSurface */
+- (nullable instancetype)initWithProperties:(NSDictionary <IOSurfacePropertyKey, id> *)properties;
+
+/* "Lock" or "Unlock" a IOSurface for reading or writing.
+
+ The term "lock" is used loosely in this context, and is simply used along with the
+ "unlock" information to put a bound on CPU access to the raw IOSurface data.
+
+ If the seed parameter is non-NULL, IOSurfaceLock() will store the buffer's
+ internal modification seed value at the time you made the lock call. You can compare
+ this value to a value returned previously to determine of the contents of the buffer
+ has been changed since the last lock.
+
+ In the case of IOSurfaceUnlock(), the seed value returned will be the internal
+ seed value at the time of the unlock. If you locked the buffer for writing, this value
+ will be incremented as the unlock is performed and the new value will be returned.
+
+ See the IOSurfacePropertyKeyLock enums for more information.
+
+ Note: Locking and unlocking a IOSurface is not a particularly cheap operation,
+ so care should be taken to avoid the calls whenever possible. The seed values are
+ particularly useful for keeping a cache of the buffer contents.
+*/
+- (kern_return_t)lockWithOptions:(IOSurfaceLockOptions)options seed:(nullable uint32_t *)seed;
+- (kern_return_t)unlockWithOptions:(IOSurfaceLockOptions)options seed:(nullable uint32_t *)seed;
+
+/* The total allocation size of the IOSurface */
+@property (readonly) NSInteger allocationSize;
+/* Basic surface layout information */
+@property (readonly) NSInteger width;
+@property (readonly) NSInteger height;
+@property (readonly) void *baseAddress NS_RETURNS_INNER_POINTER;
+@property (readonly) OSType pixelFormat;
+/* Note: These properties may not return well-defined values for planar surfaces */
+@property (readonly) NSInteger bytesPerRow;
+@property (readonly) NSInteger bytesPerElement;
+@property (readonly) NSInteger elementWidth;
+@property (readonly) NSInteger elementHeight;
+
+/* This will return the current seed value of the buffer and is a cheap property to read to see
+ if the contents of the buffer have changed since the last lock/unlock. */
+@property (readonly) uint32_t seed;
+
+/* Return the number of planes in this buffer. Will be 0 if the surface is non-planar */
+@property (readonly) NSUInteger planeCount;
+
+/* These properties return information about a particular plane of a IOSurface. They will
+ raise if called on non-planar surfaces or if the index value is not less than the number
+ of planes. */
+- (NSInteger)widthOfPlaneAtIndex:(NSUInteger)planeIndex;
+- (NSInteger)heightOfPlaneAtIndex:(NSUInteger)planeIndex;
+- (NSInteger)bytesPerRowOfPlaneAtIndex:(NSUInteger)planeIndex;
+- (NSInteger)bytesPerElementOfPlaneAtIndex:(NSUInteger)planeIndex;
+- (NSInteger)elementWidthOfPlaneAtIndex:(NSUInteger)planeIndex;
+- (NSInteger)elementHeightOfPlaneAtIndex:(NSUInteger)planeIndex;
+- (void *)baseAddressOfPlaneAtIndex:(NSUInteger)planeIndex NS_RETURNS_INNER_POINTER;
+
+/* These calls let you attach property list types to a IOSurface buffer. These calls are
+ expensive (they essentially must serialize the data into the kernel) and thus should be avoided whenever
+ possible. Note: These functions can not be used to change the underlying surface properties. */
+- (void)setAttachment:(id)anObject forKey:(NSString *)key;
+- (nullable id)attachmentForKey:(NSString *)key;
+- (void)removeAttachmentForKey:(NSString *)key;
+- (void)setAllAttachments:(NSDictionary *)dict;
+- (nullable NSDictionary *)allAttachments;
+- (void)removeAllAttachments;
+
+/* There are cases where it is useful to know whether or not an IOSurface buffer is considered to be "in use"
+ by other users of the same IOSurface. In particular, CoreVideo and other APIs make use of the IOSurface
+ use count facility to know when it is safe to recycle an IOSurface backed CVPixelBuffer object. This is
+ particularly important when IOSurface objects are being shared across process boundaries and the normal
+ mechanisms one might use would not be viable.
+
+ The IOSurface use count is similar in concept to any other reference counting scheme. When the global use
+ count of an IOSurface goes to zero, it is no longer considered "in use". When it is anything other than
+ zero, then the IOSurface is still "in use" by someone and therefore anyone attempting to maintain a pool
+ of IOSurfaces to be recycled should not reclaim that IOSurface.
+
+ Note that IOSurface maintains both a per-process and an internal system wide usage count. In the current
+ implementation, when the per-process usage count goes from zero to one, the system wide usage count is
+ incremented by one. When the per-process usage count drops back to zero (either via explicit decrement
+ calls or the process terminates), the global usage count is decremented by one. */
+
+@property (readonly, getter = isInUse) BOOL inUse;
+- (void)incrementUseCount;
+- (void)decrementUseCount;
+
+/* The localUseCount property returns the local per-process usage count for an IOSurface. This call is only
+ provided for logging/debugging purposes and should never be used to determine whether an IOSurface is
+ considered to be "in use". The isInUse property is the only call that should be used for that purpose. */
+@property (readonly ) int32_t localUseCount;
+
+/* This property returns YES if it is legal to choose an OpenGL or Metal pixel format with a bytes per pixel
+value that is different than the bytesPerElement value(s) of this IOSurface. Returns NO if the bytes per pixel
+value must be an exact match. */
+@property (readonly) BOOL allowsPixelSizeCasting;
+
+/* See comments in IOSurfaceAPI.h */
+- (kern_return_t)setPurgeable:(IOSurfacePurgeabilityState)newState oldState:(IOSurfacePurgeabilityState * __nullable)oldState
+ IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif
+
+#endif
diff -ruN /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceRef.h /Applications/Xcode9-beta1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceRef.h
--- /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceRef.h 1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode9-beta1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceRef.h 2017-05-28 01:06:44.000000000 -0400
@@ -0,0 +1,436 @@
+/*
+ * IOSurfaceRef.h
+ * IOSurface
+ *
+ * Copyright 2006-2016 Apple Computer, Inc. All rights reserved.
+ *
+ */
+
+#ifndef _IOSURFACE_REF_H
+#define _IOSURFACE_REF_H 1
+
+#include <IOSurface/IOSurfaceBase.h>
+#include <IOSurface/IOSurfaceTypes.h>
+
+typedef struct CF_BRIDGED_TYPE(id) __IOSurface *IOSurfaceRef IOSFC_SWIFT_NAME(IOSurfaceRef);
+
+__BEGIN_DECLS
+
+CF_IMPLICIT_BRIDGING_ENABLED
+CF_ASSUME_NONNULL_BEGIN
+
+/* The following list of properties are used with the CFDictionary passed to IOSurfaceCreate(). */
+
+/* kIOSurfaceAllocSize - CFNumber of the total allocation size of the buffer including all planes.
+ Defaults to BufferHeight * BytesPerRow if not specified. Must be specified for
+ dimensionless buffers. */
+extern const CFStringRef kIOSurfaceAllocSize IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfaceWidth - CFNumber for the width of the IOSurface buffer in pixels. Required for planar IOSurfaces. */
+extern const CFStringRef kIOSurfaceWidth IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfaceHeight - CFNumber for the height of the IOSurface buffer in pixels. Required for planar IOSurfaces. */
+extern const CFStringRef kIOSurfaceHeight IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfaceBytesPerRow - CFNumber for the bytes per row of the buffer. If not specified, IOSurface will first calculate
+ the number full elements required on each row (by rounding up), multiplied by the bytes per element
+ for this buffer. That value will then be appropriately aligned. */
+extern const CFStringRef kIOSurfaceBytesPerRow IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Optional properties for non-planar two dimensional images */
+
+/* kIOSurfaceBytesPerElement - CFNumber for the total number of bytes in an element. Default to 1. */
+extern const CFStringRef kIOSurfaceBytesPerElement IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfaceElementWidth - CFNumber for how many pixels wide each element is. Defaults to 1. */
+extern const CFStringRef kIOSurfaceElementWidth IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfaceElementHeight - CFNumber for how many pixels high each element is. Defaults to 1. */
+extern const CFStringRef kIOSurfaceElementHeight IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfaceOffset - CFNumber for the starting offset into the buffer. Defaults to 0. */
+extern const CFStringRef kIOSurfaceOffset IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Properties for planar surface buffers */
+
+/* kIOSurfacePlaneInfo - CFArray describing each image plane in the buffer as a CFDictionary. The CFArray must have at least one entry. */
+extern const CFStringRef kIOSurfacePlaneInfo IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfacePlaneWidth - CFNumber for the width of this plane in pixels. Required for image planes. */
+extern const CFStringRef kIOSurfacePlaneWidth IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfacePlaneHeight - CFNumber for the height of this plane in pixels. Required for image planes. */
+extern const CFStringRef kIOSurfacePlaneHeight IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfacePlaneBytesPerRow - CFNumber for the bytes per row of this plane. If not specified, IOSurface will first calculate
+ the number full elements required on each row (by rounding up), multiplied by the bytes per element
+ for this plane. That value will then be appropriately aligned. */
+extern const CFStringRef kIOSurfacePlaneBytesPerRow IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfacePlaneOffset - CFNumber for the offset into the buffer for this plane. If not specified then IOSurface
+ will lay out each plane sequentially based on the previous plane's allocation size. */
+extern const CFStringRef kIOSurfacePlaneOffset IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfacePlaneSize - CFNumber for the total data size of this plane. Defaults to plane height * plane bytes per row if not specified. */
+extern const CFStringRef kIOSurfacePlaneSize IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Optional properties for planar surface buffers */
+
+/* kIOSurfacePlaneBase - CFNumber for the base offset into the buffer for this plane. Optional, defaults to the plane offset */
+extern const CFStringRef kIOSurfacePlaneBase IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfacePlaneBitsPerElement - CFNumber for the bits per element of this plane. Optional, default is 1.
+ For use in cases where kIOSurfacePlaneBytesPerElement doesn't allow sufficient precision. */
+extern const CFStringRef kIOSurfacePlaneBitsPerElement IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+/* kIOSurfacePlaneBytesPerElement - CFNumber for the bytes per element of this plane. Optional, default is 1. */
+extern const CFStringRef kIOSurfacePlaneBytesPerElement IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfacePlaneElementWidth - CFNumber for the element width of this plane. Optional, default is 1. */
+extern const CFStringRef kIOSurfacePlaneElementWidth IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfacePlaneElementHeight - CFNumber for the element height of this plane. Optional, default is 1. */
+extern const CFStringRef kIOSurfacePlaneElementHeight IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Optional properties global to the entire IOSurface */
+
+/* kIOSurfaceCacheMode - CFNumber for the CPU cache mode to be used for the allocation. Default is kIOMapDefaultCache. */
+extern const CFStringRef kIOSurfaceCacheMode IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfaceIsGlobal - CFBoolean If true, the IOSurface may be looked up by any task in the system by its ID. */
+extern const CFStringRef kIOSurfaceIsGlobal IOSFC_AVAILABLE_BUT_DEPRECATED(__MAC_10_6, __MAC_10_11, __IPHONE_3_0, __IPHONE_9_0);
+
+/* kIOSurfacePixelFormat - CFNumber A 32-bit unsigned integer that stores the traditional Mac OS X buffer format */
+extern const CFStringRef kIOSurfacePixelFormat IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* kIOSurfacePixelSizeCastingAllowed - If false the creator promises that there will be no pixel size casting when used on the GPU. Default is true. */
+extern const CFStringRef kIOSurfacePixelSizeCastingAllowed IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+/* kIOSurfacePlaneComponentBitDepths - CFArray[CFNumber] for bit depth of each component in this plane. */
+extern const CFStringRef kIOSurfacePlaneComponentBitDepths IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+/* kIOSurfacePlaneComponentBitOffsets - CFArray[CFNumber] for bit offset of each component in this plane, (low bit zero, high bit 7). For example 'BGRA' would be {0, 8, 16, 24} */
+extern const CFStringRef kIOSurfacePlaneComponentBitOffsets IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+typedef CF_ENUM(int32_t, IOSurfaceComponentName) {
+ kIOSurfaceComponentNameUnknown = 0,
+ kIOSurfaceComponentNameAlpha = 1,
+ kIOSurfaceComponentNameRed = 2,
+ kIOSurfaceComponentNameGreen = 3,
+ kIOSurfaceComponentNameBlue = 4,
+ kIOSurfaceComponentNameLuma = 5,
+ kIOSurfaceComponentNameChromaRed = 6,
+ kIOSurfaceComponentNameChromaBlue = 7,
+};
+
+/* kIOSurfacePlaneComponentNames - CFArray[CFNumber] for IOSurfaceComponentName of each component in this plane.
+ For example 'BGRA' would be {4, 3, 2, 1} */
+extern const CFStringRef kIOSurfacePlaneComponentNames IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+typedef CF_ENUM(int32_t, IOSurfaceComponentType) {
+ kIOSurfaceComponentTypeUnknown = 0,
+ kIOSurfaceComponentTypeUnsignedInteger = 1,
+ kIOSurfaceComponentTypeSignedInteger = 2,
+ kIOSurfaceComponentTypeFloat = 3,
+};
+
+/* kIOSurfacePlaneComponentTypes - CFArray[CFNumber] for IOSurfaceComponentType of each component in this plane. */
+extern const CFStringRef kIOSurfacePlaneComponentTypes IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+typedef CF_ENUM(int32_t, IOSurfaceComponentRange) {
+ kIOSurfaceComponentRangeUnknown = 0,
+ kIOSurfaceComponentRangeFullRange = 1,
+ kIOSurfaceComponentRangeVideoRange = 2,
+ kIOSurfaceComponentRangeWideRange = 3,
+};
+
+/* kIOSurfacePlaneComponentRanges - CFArray[CFNumber] for IOSurfaceComponentRange of each component in this plane. */
+extern const CFStringRef kIOSurfacePlaneComponentRanges IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+typedef CF_ENUM(int32_t, IOSurfaceSubsampling) {
+ kIOSurfaceSubsamplingUnknown = 0,
+ kIOSurfaceSubsamplingNone = 1, // Includes "4:4:4"
+ kIOSurfaceSubsampling422 = 2, // Chroma downsampled by 2x1
+ kIOSurfaceSubsampling420 = 3, // Chroma downsampled by 2x2
+ kIOSurfaceSubsampling411 = 4, // Chroma downsampled by 4x1
+};
+
+/* kIOSurfaceSubsampling - CFNumber(IOSurfaceSubsampling) describing the chroma subsampling. */
+extern const CFStringRef kIOSurfaceSubsampling IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+CFTypeID IOSurfaceGetTypeID(void)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Create a brand new IOSurface object */
+IOSurfaceRef _Nullable IOSurfaceCreate(CFDictionaryRef properties)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Perform an atomic lookup and retain of a IOSurface by its IOSurfaceID.
+ Note: Performing multiple lookups of the same IOSurface will *NOT* return
+ the same IOSurfaceRef. If you need to compare two IOSurface objects
+ for equality, you must either do so by comparing their IOSurfaceIDs, or by
+ using CFEqual(). */
+IOSurfaceRef _Nullable IOSurfaceLookup(IOSurfaceID csid) CF_RETURNS_RETAINED
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Retrieve the unique IOSurfaceID value for a IOSurface */
+IOSurfaceID IOSurfaceGetID(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* "Lock" or "Unlock" a IOSurface for reading or writing.
+
+ The term "lock" is used loosely in this context, and is simply used along with the
+ "unlock" information to put a bound on CPU access to the raw IOSurface data.
+
+ If the seed parameter is non-NULL, IOSurfaceLock() will store the buffer's
+ internal modification seed value at the time you made the lock call. You can compare
+ this value to a value returned previously to determine of the contents of the buffer
+ has been changed since the last lock.
+
+ In the case of IOSurfaceUnlock(), the seed value returned will be the internal
+ seed value at the time of the unlock. If you locked the buffer for writing, this value
+ will be incremented as the unlock is performed and the new value will be returned.
+
+ See the kIOSurfaceLock enums for more information.
+
+ Note: Locking and unlocking a IOSurface is not a particularly cheap operation,
+ so care should be taken to avoid the calls whenever possible. The seed values are
+ particularly useful for keeping a cache of the buffer contents.
+*/
+kern_return_t IOSurfaceLock(IOSurfaceRef buffer, IOSurfaceLockOptions options, uint32_t * _Nullable seed)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+kern_return_t IOSurfaceUnlock(IOSurfaceRef buffer, IOSurfaceLockOptions options, uint32_t * _Nullable seed)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* These routines are all fairly self explanatory. 0 is returned if buffer is invalid or NULL */
+size_t IOSurfaceGetAllocSize(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetWidth(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetHeight(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetBytesPerElement(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetBytesPerRow(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+void *IOSurfaceGetBaseAddress(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetElementWidth(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetElementHeight(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+OSType IOSurfaceGetPixelFormat(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* This will return the current seed value of the buffer and is a cheap call to make to see
+ if the contents of the buffer have changed since the last lock/unlock. */
+uint32_t IOSurfaceGetSeed(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Return the number of planes in this buffer. May be 0. Returns 0 for an invalid or NULL buffer pointer. */
+size_t IOSurfaceGetPlaneCount(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* These routines return information about a particular plane of a IOSurface.
+
+ If the planeIndex is greater than or equal to the plane count of the IOSurface, zero
+ is returned.... with one exception. If this IOSurface has zero planes and a planeIndex
+ of zero is passed in, the routines function just like the non-planar APIs. This is to allow
+ higher level code to treat planar and non-planar buffers is a more uniform fashion. */
+
+size_t IOSurfaceGetWidthOfPlane(IOSurfaceRef buffer, size_t planeIndex)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetHeightOfPlane(IOSurfaceRef buffer, size_t planeIndex)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetBytesPerElementOfPlane(IOSurfaceRef buffer, size_t planeIndex)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetBytesPerRowOfPlane(IOSurfaceRef buffer, size_t planeIndex)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+void *IOSurfaceGetBaseAddressOfPlane(IOSurfaceRef buffer, size_t planeIndex)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetElementWidthOfPlane(IOSurfaceRef buffer, size_t planeIndex)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+size_t IOSurfaceGetElementHeightOfPlane(IOSurfaceRef buffer, size_t planeIndex)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* These routines return information about a particular component of a particular plane of a IOSurface.
+ For non-planar IOSurfaces, pass zero for planeIndex. */
+
+size_t IOSurfaceGetNumberOfComponentsOfPlane(IOSurfaceRef buffer, size_t planeIndex)
+IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+IOSurfaceComponentName IOSurfaceGetNameOfComponentOfPlane(IOSurfaceRef buffer, size_t planeIndex, size_t componentIndex)
+IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+IOSurfaceComponentType IOSurfaceGetTypeOfComponentOfPlane(IOSurfaceRef buffer, size_t planeIndex, size_t componentIndex)
+IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+IOSurfaceComponentRange IOSurfaceGetRangeOfComponentOfPlane(IOSurfaceRef buffer, size_t planeIndex, size_t componentIndex)
+IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+size_t IOSurfaceGetBitDepthOfComponentOfPlane(IOSurfaceRef buffer, size_t planeIndex, size_t componentIndex)
+IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+size_t IOSurfaceGetBitOffsetOfComponentOfPlane(IOSurfaceRef buffer, size_t planeIndex, size_t componentIndex)
+IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+IOSurfaceSubsampling IOSurfaceGetSubsampling(IOSurfaceRef buffer)
+IOSFC_AVAILABLE_STARTING(__MAC_10_13, __IPHONE_11_0);
+
+/* These calls let you attach CF property list types to a IOSurface buffer. These calls are
+ expensive (they essentially must serialize the data into the kernel) and thus should be avoided whenever
+ possible. Note: These functions can not be used to change the underlying surface properties. */
+void IOSurfaceSetValue(IOSurfaceRef buffer, CFStringRef key, CFTypeRef value)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+CFTypeRef _Nullable IOSurfaceCopyValue(IOSurfaceRef buffer, CFStringRef key)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+void IOSurfaceRemoveValue(IOSurfaceRef buffer, CFStringRef key)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Bulk setters and getters for setting, retrieving or removing the entire
+ set of values at once .*/
+void IOSurfaceSetValues(IOSurfaceRef buffer, CFDictionaryRef keysAndValues)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+CFDictionaryRef _Nullable IOSurfaceCopyAllValues(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+void IOSurfaceRemoveAllValues(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* This call lets you get a mach_port_t that holds a reference to the IOSurface. This is useful
+ if you need to atomically or securely pass an IOSurface to another task without making the surface global to
+ the entire system. The returned port must be deallocated with mach_port_deallocate or the equivalent.
+ Note: Any live mach ports created from an IOSurfaceRef implicity increase the IOSurface's global use
+ count by one until the port is deleted. */
+mach_port_t IOSurfaceCreateMachPort(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* This call lets you take a mach_port_t created via IOSurfaceCreatePort() and recreate an IOSurfaceRef from it.
+ Note: This call does NOT destroy the port. */
+IOSurfaceRef _Nullable IOSurfaceLookupFromMachPort(mach_port_t port) CF_RETURNS_RETAINED
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/*
+ IOSurfaceGetPropertyMaximum() will return the maximum of a given property that is guaranteed to be
+ compatible with all of the current devices (GPUs, etc.) in the system. The most important ones being:
+
+ kIOSurfaceBytesPerRow
+ kIOSurfaceWidth
+ kIOSurfaceHeight
+ kIOSurfacePlaneBytesPerRow
+ kIOSurfacePlaneWidth
+ kIOSurfacePlaneHeight
+
+ For the width and height properties, the maximum values are the largest that are guaranteed to work
+ for both reading and writing. In OpenGL terms this translates into the largest size that will work
+ for both textures and render targets.
+
+ This function returns 0 for properties that have no predefined limit or where the concept of a limit
+ would be considered invalid (such as kIOSurfacePixelFormat).
+
+*/
+size_t IOSurfaceGetPropertyMaximum(CFStringRef property)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/*
+ If a property has a particular alignment requirement, then IOSurfaceGetPropertyAlignment() will return it.
+ If the property has no alignment requirement then 1 will be returned. The following properties
+ should always be aligned if you choose calculate them yourself:
+
+ kIOSurfaceBytesPerRow
+ kIOSurfaceOffset
+
+ kIOSurfacePlaneBase
+ kIOSurfacePlaneOffset
+ kIOSurfacePlaneBytesPerRow
+
+*/
+size_t IOSurfaceGetPropertyAlignment(CFStringRef property)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* This is a convenience function to automatically align property values. For properties with no alignment
+ requirements, the original value will be returned. */
+size_t IOSurfaceAlignProperty(CFStringRef property, size_t value)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+
+/* There are cases where it is useful to know whether or not an IOSurface buffer is considered to be "in use"
+ by other users of the same IOSurface. In particular, CoreVideo and other APIs make use of the IOSurface
+ use count facility to know when it is safe to recycle an IOSurface backed CVPixelBuffer object. This is
+ particularly important when IOSurface objects are being shared across process boundaries and the normal
+ mechanisms one might use would not be viable.
+
+ The IOSurface use count is similar in concept to any other reference counting scheme. When the global use
+ count of an IOSurface goes to zero, it is no longer considered "in use". When it is anything other than
+ zero, then the IOSurface is still "in use" by someone and therefore anyone attempting to maintain a pool
+ of IOSurfaces to be recycled should not reclaim that IOSurface.
+
+ Note that IOSurface maintains both a per-process and an internal system wide usage count. In the current
+ implementation, when the per-process usage count goes from zero to one, the system wide usage count is
+ incremented by one. When the per-process usage count drops back to zero (either via explicit decrement
+ calls or the process terminates), the global usage count is decremented by one.
+
+ IOSurfaceGetUseCount() returns the local per-process usage count for an IOSurface. This call is only
+ provided for logging/debugging purposes and should never be used to determine whether an IOSurface is
+ considered to be "in use". IOSurfaceIsInUse() is the only call that should be used for that purpose. */
+
+/* Increment the per-process usage count for an IOSurface */
+void IOSurfaceIncrementUseCount(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Decrement the per-process usage count for an IOSurface */
+void IOSurfaceDecrementUseCount(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Return the per-process usage count for an IOSurface */
+int32_t IOSurfaceGetUseCount(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Returns true of an IOSurface is in use by any process in the system, otherwise false. */
+Boolean IOSurfaceIsInUse(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0);
+
+/* Rerturns true if this IOSurface allows pixel size casting */
+Boolean IOSurfaceAllowsPixelSizeCasting(IOSurfaceRef buffer)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+// This acts pretty much exactly like the Mach vm_purgeable object stuff does.
+// Note: Higher level OpenGL and/or Metal based purgeability APIs should not be used for
+// texture objects backed by IOSurfaces since they will essentially be ignored.
+
+// You should assume that if you mark an IOSurface as Purgeable/Empty and mark it
+// NonVolatile and it comes back with the old state being Empty that any texture
+// objects bound to the IOSurface now have undefined content in them.
+//
+// If oldState is non-NULL, it will return the previous state of the IOSurface.
+//
+// kIOSurfacePurgeableNonVolatile - The IOSurface was not volatile and the contents are still valid
+// kIOSurfacePurgeableVolatile - The IOSurface was volatile, but the contents were not discarded
+// kIOSurfacePurgeableEmpty - The IOSurface was empty and the contents have been discarded.
+// kIOSurfacePurgeableKeepCurrent - Don't change the current status, just return what the state is now.
+kern_return_t IOSurfaceSetPurgeable(IOSurfaceRef buffer, uint32_t newState, uint32_t * __nullable oldState)
+ IOSFC_AVAILABLE_STARTING(__MAC_10_12, __IPHONE_10_0);
+
+__END_DECLS
+
+CF_ASSUME_NONNULL_END
+CF_IMPLICIT_BRIDGING_DISABLED
+
+#endif
diff -ruN /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceTypes.h /Applications/Xcode9-beta1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceTypes.h
--- /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceTypes.h 1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode9-beta1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/IOSurface.framework/Headers/IOSurfaceTypes.h 2017-05-28 01:06:44.000000000 -0400
@@ -0,0 +1,66 @@
+/*
+ * IOSurfaceTypes.h
+ * IOSurface
+ *
+ * Copyright 2006-20016 Apple, Inc. All rights reserved.
+ *
+ */
+
+#ifndef _IOSURFACE_TYPES_H
+#define _IOSURFACE_TYPES_H
+
+#include <IOSurface/IOSurfaceBase.h>
+
+typedef uint32_t IOSurfaceID;
+
+typedef CF_OPTIONS(uint32_t, IOSurfaceLockOptions)
+{
+ // If you are not going to modify the data while you hold the lock, you should set this flag to avoid invalidating
+ // any existing caches of the buffer contents. This flag should be passed both to the lock and unlock functions.
+ // Non-symmetrical usage of this flag will result in undefined behavior.
+ kIOSurfaceLockReadOnly = 0x00000001,
+
+ // If you want to detect/avoid a potentially expensive paging operation (such as readback from a GPU to system memory)
+ // when you lock the buffer, you may include this flag. If locking the buffer requires a readback, the lock will
+ // fail with an error return of kIOReturnCannotLock.
+ kIOSurfaceLockAvoidSync = 0x00000002,
+};
+
+typedef CF_OPTIONS(uint32_t, IOSurfacePurgeabilityState)
+{
+ kIOSurfacePurgeableNonVolatile = 0, // Mark the IOSurface as non-volatile
+ kIOSurfacePurgeableVolatile = 1, // Mark the IOSurface as volatile (contents may be thrown away)
+ kIOSurfacePurgeableEmpty = 2, // Throw away the contents of the IOSurface immediately
+ kIOSurfacePurgeableKeepCurrent = 3, // Keep the current setting (useful for returning current status info)
+};
+
+/*
+** Note: Write-combined memory is optimized for resources that the CPU writes into, but never reads.
+** On some implementations, writes may bypass caches, which avoids cache pollution. Read actions may perform very poorly.
+** Applications should investigate changing the cache mode only if writing to normally cached buffers is known to cause
+** performance issues due to cache pollution, as write-combined memory can have surprising performance pitfalls.
+*/
+enum {
+ kIOSurfaceDefaultCache = 0,
+ kIOSurfaceInhibitCache = 1,
+ kIOSurfaceWriteThruCache = 2,
+ kIOSurfaceCopybackCache = 3,
+ kIOSurfaceWriteCombineCache = 4,
+ kIOSurfaceCopybackInnerCache = 5
+};
+
+// IOSurface Memory mapping options (used with kIOSurfaceCacheMode or IOSurfacePropertyKeyCacheMode)
+enum {
+ kIOSurfaceMapCacheShift = 8,
+ kIOSurfaceMapDefaultCache = kIOSurfaceDefaultCache << kIOSurfaceMapCacheShift,
+ kIOSurfaceMapInhibitCache = kIOSurfaceInhibitCache << kIOSurfaceMapCacheShift,
+ kIOSurfaceMapWriteThruCache = kIOSurfaceWriteThruCache << kIOSurfaceMapCacheShift,
+ kIOSurfaceMapCopybackCache = kIOSurfaceCopybackCache << kIOSurfaceMapCacheShift,
+ kIOSurfaceMapWriteCombineCache = kIOSurfaceWriteCombineCache << kIOSurfaceMapCacheShift,
+ kIOSurfaceMapCopybackInnerCache = kIOSurfaceCopybackInnerCache << kIOSurfaceMapCacheShift,
+};
+
+/* IOSurface APIs that return a kern_return_t will return either kIOSurfaceSuccess or an internal error code for failures */
+#define kIOSurfaceSuccess KERN_SUCCESS // OK
+
+#endif