1/*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License").  You may not use this file except in compliance with the
9 * License.  Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
11 *
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
17 * License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22
23#ifndef _IOACCEL_SURFACE_CONNECT_H
24#define _IOACCEL_SURFACE_CONNECT_H
25
26#include <IOKit/graphics/IOAccelTypes.h>
27#include <IOKit/graphics/IOAccelClientConnect.h>
28
29/*
30** Surface visible region in device coordinates.
31**
32** num_rects:   The number of rectangles in the rect array.  If num_rects
33**              is zero the bounds rectangle is used for the visible rectangle.
34**              If num_rects is zero the surface must be completely contained
35**              by the device.
36**
37** bounds:      The unclipped surface rectangle in device coords.  Extends
38**              beyond the device bounds if the surface is not totally on
39**              the device.
40**
41** rect[]:      An array of visible rectangles in device coords.  If num_rects
42**              is non-zero only the region described by these rectangles is
43**              copied to the frame buffer during a flush operation.
44*/
45typedef struct
46{
47        UInt32        num_rects;
48        IOAccelBounds bounds;
49        IOAccelBounds rect[0];
50} IOAccelDeviceRegion;
51
52
53/*
54** Determine the size of a region.
55*/
56#define IOACCEL_SIZEOF_DEVICE_REGION(_rgn_) (sizeof(IOAccelDeviceRegion) + (_rgn_)->num_rects * sizeof(IOAccelBounds))
57
58
59/*
60** Surface client public memory types.  Private memory types start with
61** kIOAccelNumSurfaceMemoryTypes.
62*/
63enum eIOAccelSurfaceMemoryTypes {
64        kIOAccelNumSurfaceMemoryTypes
65};
66
67
68/*
69** Surface client public methods.  Private methods start with
70** kIOAccelNumSurfaceMethods.
71*/
72enum eIOAccelSurfaceMethods {
73        kIOAccelSurfaceReadLockOptions,
74        kIOAccelSurfaceReadUnlockOptions,
75        kIOAccelSurfaceGetState,
76        kIOAccelSurfaceWriteLockOptions,
77        kIOAccelSurfaceWriteUnlockOptions,
78        kIOAccelSurfaceRead,
79        kIOAccelSurfaceSetShapeBacking,
80
81        kIOAccelSurfaceSetIDMode,
82        kIOAccelSurfaceSetScale,
83
84        kIOAccelSurfaceSetShape,
85        kIOAccelSurfaceFlush,
86
87        kIOAccelSurfaceQueryLock,
88
89        kIOAccelSurfaceReadLock,
90        kIOAccelSurfaceReadUnlock,
91        kIOAccelSurfaceWriteLock,
92        kIOAccelSurfaceWriteUnlock,
93
94        kIOAccelSurfaceControl,
95        kIOAccelSurfaceSetShapeBackingAndLength,
96
97        kIOAccelNumSurfaceMethods
98};
99
100
101/*
102** Option bits for IOAccelCreateSurface and the kIOAccelSurfaceSetIDMode method.
103** The color depth field can take any value of the _CGSDepth enumeration.
104*/
105typedef enum {
106        kIOAccelSurfaceModeColorDepth1555  = 0x00000003,
107        kIOAccelSurfaceModeColorDepth8888  = 0x00000004,
108//      kIOAccelSurfaceModeColorDepthRGB565 = 0x00000005,
109        kIOAccelSurfaceModeColorDepthYUV   = 0x00000006,
110        kIOAccelSurfaceModeColorDepthYUV9  = 0x00000007,
111        kIOAccelSurfaceModeColorDepthYUV12 = 0x00000008,
112        kIOAccelSurfaceModeColorDepthYUV2  = 0x00000009,
113        kIOAccelSurfaceModeColorDepthBGRA32 = 0x0000000A,
114
115//      kIOAccelSurfaceModeColorDepthRGBA64       = 0x0000000B,
116//      kIOAccelSurfaceModeColorDepthRGBAFloat64  = 0x0000000C,
117//      kIOAccelSurfaceModeColorDepthRGBAFloat128 = 0x0000000D,
118
119//      kIOAccelSurfaceModeColorDepthYUV420  = 0x0000000E,
120        kIOAccelSurfaceModeColorDepth2101010 = 0x0000000F,
121
122        kIOAccelSurfaceModeColorDepthBits  = 0x0000000F,
123
124        kIOAccelSurfaceModeStereoBit       = 0x00000010,
125        kIOAccelSurfaceModeWindowedBit     = 0x00000020,
126
127        kIOAccelSurfaceModeBeamSync        = 0x00008000
128} eIOAccelSurfaceModeBits;
129
130
131/*
132** Options bits for IOAccelSetSurfaceShape and the kIOAccelSurfaceSetShape method.
133*/
134typedef enum {
135        kIOAccelSurfaceShapeNone             = 0x00000000,
136        kIOAccelSurfaceShapeNonBlockingBit   = 0x00000001,
137        kIOAccelSurfaceShapeNonSimpleBit     = 0x00000002,
138        kIOAccelSurfaceShapeIdentityScaleBit = 0x00000004,
139        kIOAccelSurfaceShapeFrameSyncBit     = 0x00000008,
140        kIOAccelSurfaceShapeBeamSyncBit      = 0x00000010,
141        kIOAccelSurfaceShapeStaleBackingBit  = 0x00000020,
142        kIOAccelSurfaceShapeAssemblyBit      = 0x00000040,
143        kIOAccelSurfaceShapeWaitEnabledBit   = 0x00000080,
144
145        /* wrong name, use kIOAccelSurfaceShapeNonBlockingBit */
146        kIOAccelSurfaceShapeBlockingBit      = kIOAccelSurfaceShapeNonBlockingBit
147} eIOAccelSurfaceShapeBits;
148
149/*
150** Return bits for the kIOAccelSurfaceGetState method.
151*/
152typedef enum {
153        kIOAccelSurfaceStateNone    = 0x00000000,
154        kIOAccelSurfaceStateIdleBit = 0x00000001
155} eIOAccelSurfaceStateBits;
156
157/*
158** Option bits for the kIOAccelSurfaceSetScale method.
159*/
160typedef enum {
161        kIOAccelSurfaceBeamSyncSwaps = 0x00000001,
162        kIOAccelSurfaceFixedSource   = 0x00000002,
163
164        kIOAccelSurfaceFiltering     = 0x000000f0,
165        kIOAccelSurfaceFilterDefault = 0x00000000,
166        kIOAccelSurfaceFilterNone    = 0x00000010,
167        kIOAccelSurfaceFilterLinear  = 0x00000020
168
169} eIOAccelSurfaceScaleBits;
170
171/*
172** Option bits for the kIOAccelSurfaceLock methods.
173*/
174typedef enum {
175    kIOAccelSurfaceLockInBacking  = 0,
176    kIOAccelSurfaceLockInAccel    = 1,
177    kIOAccelSurfaceLockInDontCare = 2,
178    kIOAccelSurfaceLockInMask     = 0x00000003
179} eIOAccelSurfaceLockBits;
180
181#endif /* _IOACCEL_SURFACE_CONNECT_H */
182
183