home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Headers / driverkit / displayDefs.h < prev    next >
C/C++ Source or Header  |  1996-04-05  |  8KB  |  230 lines

  1. /*     Copyright (c) 1992-95 NeXT Computer, Inc.  All rights reserved. 
  2.  *
  3.  * displayDefs.h - Defs of various structs/data used by the display system.
  4.  *
  5.  *
  6.  * HISTORY
  7.  * 24 Oct 95    Rakesh Dubey
  8.  *      Added/changed some data structs. 
  9.  * 01 Sep 92    Joe Pasqua
  10.  *      Created.
  11.  */
  12.  
  13. #ifndef __DISPLAYDEFS_H__
  14. #define __DISPLAYDEFS_H__
  15.  
  16. /* Bits per pixel values. */
  17.  
  18. typedef enum _IOBitsPerPixel {
  19.     IO_2BitsPerPixel,    /*  2 bpp grayscale */
  20.     IO_8BitsPerPixel,    /*  8 bpp grayscale */
  21.     IO_12BitsPerPixel,    /* 16 bpp, 12 used (4 bits/component) */
  22.     IO_15BitsPerPixel,    /* 16 bpp, 15 used (5 bits/component) */
  23.     IO_24BitsPerPixel,    /* 32 bpp, 24 used (8 bits/component) */
  24.     IO_VGA        /* VGA framebuffer (VGA is special, and may not be
  25.              * linearly mapped or packed pixel format.) */
  26. } IOBitsPerPixel;
  27.  
  28. /* Definitions of colorspace type and values */
  29.  
  30. typedef enum _IOColorSpace {
  31.     IO_OneIsBlackColorSpace = 0,    /* Monochrome, 1 is black. */
  32.     IO_OneIsWhiteColorSpace = 1,    /* Monochrome, 1 is white. */
  33.     IO_RGBColorSpace = 2,
  34.     IO_CMYKColorSpace = 5,
  35. } IOColorSpace;
  36.  
  37. /* Enumeration to encode the use of bits within a pixel. */
  38.  
  39. typedef enum _IOSampleType {
  40.     IO_SampleTypeEnd = '\0',
  41.     IO_SampleTypeRed = 'R',
  42.     IO_SampleTypeGreen = 'G',
  43.     IO_SampleTypeBlue = 'B',
  44.     IO_SampleTypeAlpha = 'A',
  45.     IO_SampleTypeGray = 'W',    /* 1 is white colorspace */
  46.  
  47.     IO_SampleTypeCyan = 'C',
  48.     IO_SampleTypeMagenta = 'M',
  49.     IO_SampleTypeYellow = 'Y',
  50.     IO_SampleTypeBlack = 'K',    /* 1 is black colorspace */
  51.  
  52.     IO_SampleTypeLuminance = 'l',
  53.     IO_SampleTypeChromaU = 'u',
  54.     IO_SampleTypeChromaV = 'v',
  55.     IO_SampleTypeChromaA = 'a',
  56.     IO_SampleTypeChromaB = 'b',
  57.  
  58.     IO_SampleTypePseudoColor = 'P',
  59.     IO_SampleTypeMustSet = '1',
  60.     IO_SampleTypeMustClear = '0',
  61.     IO_SampleTypeSkip = '-'    /* Unused bits in the pixel */
  62. } IOSampleType;
  63.  
  64. /* The bits composing a pixel are identified by an array of `IOSampleType's
  65.  * cast as chars.  The first element of the array describes the most
  66.  * significant bit of the pixel.  The encoding char is repeated as many
  67.  * times as is needed to represent the number of bits in the encoded
  68.  * channel of the pixel.  The array is terminated by SampleType_End,
  69.  * or a '\0'.  Calling `strlen' with the pixel encoding as an argument
  70.  * returns the bit-depth of the pixels.
  71.  *
  72.  * Common pixel formats:
  73.  *   RGBA (32 bits; 8 bits/component)    "RRRRRRRRGGGGGGGGBBBBBBBBAAAAAAAA"
  74.  *   RGB- (32 bits; 8 bits/component)    "RRRRRRRRGGGGGGGGBBBBBBBB--------"
  75.  *   ARGB (32 bits; 8 bits/component)    "AAAAAAAARRRRRRRRGGGGGGGGBBBBBBBB"
  76.  *   -RGB (32 bits; 8 bits/component)    "--------RRRRRRRRGGGGGGGGBBBBBBBB"
  77.  *   RGBA (16 bits; 4 bits/component)    "RRRRGGGGBBBBAAAA"
  78.  *   RGB- (16 bits; 4 bits/component)    "RRRRGGGGBBBB----"
  79.  *   -RGB (16 bits; 5 bits/component)    "-RRRRRGGGGGBBBBB"
  80.  *   W    (8 bit gray; one-is-white)    "WWWWWWWW"
  81.  *   K      (2 bit gray; one-is-black)    "KK"
  82.  *
  83.  */
  84.  
  85. /*
  86.  * Reasons why a particular mode is not available. If the corresponding bit
  87.  * is set then this mode is not available. 
  88.  */
  89. #define    IO_DISPLAY_MODE_VALID            0
  90. #define IO_DISPLAY_MODE_NEEDS_MORE_MEMORY    2
  91. #define IO_DISPLAY_MODE_SLOW_RAMDAC        4
  92. #define IO_DISPLAY_MODE_WRONG_VERSION        8
  93. #define IO_DISPLAY_MODE_OTHER_INVALID        16
  94.  
  95. #define IO_MAX_PIXEL_BITS    64     /* Max length to keep MiG happy */
  96.  
  97. typedef char IOPixelEncoding[IO_MAX_PIXEL_BITS];
  98.  
  99. /* Structure describing the layout of the display. */
  100.  
  101. typedef struct _IODisplayInfo {
  102.     int width;            /* Width in pixels. (can be virtual) */
  103.     int height;            /* Height in pixels. (can be virtual) */
  104.     int totalWidth;        /* Width in pixels including undisplayed
  105.                  * pixels. */
  106.     int rowBytes;        /* # bytes to get from one scanline to next. */
  107.     int refreshRate;        /* Monitor refresh setting. */
  108.  
  109.     /* Pointer to origin of screen. This pointer is deliberately untyped to
  110.      * force actual screen writes to be dependent on `bitsPerPixel'. */
  111.     void *frameBuffer;    
  112.     
  113.     /* VRAM configuration, indicated by memory space occupied by one pixel. */
  114.     IOBitsPerPixel bitsPerPixel;
  115.     IOColorSpace colorSpace;
  116.     IOPixelEncoding pixelEncoding;
  117.     
  118.     /* Flags used to indicate special requirements or conditions to DPS. */
  119.     unsigned int flags;
  120.     
  121.     /* Driver specific parameters. */
  122.     void *parameters;
  123.  
  124.     /* Resource requirements for this mode */
  125.     int memorySize;        /* bytes */
  126.     int scanRate;        /* Hz */
  127.     int _reserved1;
  128.     int dotClockRate;        /* Hz */
  129.  
  130.     /*
  131.      * Real screen co-ordinates (as opposed to the ones known by
  132.      * windowserver). The display driver can use these and override
  133.      * moveCursor:frame:token: to implement panning. 
  134.      */
  135.     int screenWidth;
  136.     int screenHeight;
  137.  
  138.     /*
  139.      * This is set to zero only if this mode is available for the hardware
  140.      * else the subclass should set specific bit(s) indicating why this mode
  141.      * is not available. 
  142.      */
  143.     unsigned int modeUnavailableFlag;    
  144.     
  145.     unsigned int _reserved[1];
  146.  
  147. } IODisplayInfo;
  148.  
  149. /* Definition of values for the `IODisplayInfo.flags' field. */
  150.  
  151. /* Bit 1 determines whether the display requires gamma corrected 444->555
  152.  * conversion in software. */
  153.  
  154. #define IO_DISPLAY_NEEDS_SOFTWARE_GAMMA_CORRECTION    0x00000002
  155.  
  156. /* Bits 2 and 3 specify cache behavior. */
  157.  
  158. #define IO_DISPLAY_CACHE_WRITETHROUGH        0x00000000     /* default */
  159. #define IO_DISPLAY_CACHE_COPYBACK        0x00000004
  160. #define IO_DISPLAY_CACHE_OFF            0x00000008
  161. #define IO_DISPLAY_CACHE_MASK            0x0000000C
  162.  
  163. /* Bit 4 indicates if the a hardware gamma correction transfer table
  164.  * (CLUT)exists and can be changed by an IODISPLAY_SET_TRANSFER_TABLE call. */
  165.  
  166. #define IO_DISPLAY_HAS_TRANSFER_TABLE        0x00000010
  167.  
  168. /* Parameter to be supported by Display subclasses in their implementation
  169.  * of setIntValues:forParameter:count: method, if the driver supports
  170.  * setting a hardware gamma correction transfer table.
  171.  *
  172.  * The transfer table has a maximum size of 256 ints, and may be smaller.
  173.  * 32 or 24 bit color, and 8 bit monochrome displays use the full 256 entries.
  174.  * 15 bit color displays use 32 entries. 12 bit color displays use 16 entries.
  175.  * 2 bit monochrome displays use 4 entries.  Each integer in the table holds
  176.  * a packed RGBM value.  Monochrome displays use the low byte.  Color displays
  177.  * should use the high 3 bytes, with Red in the most significant byte.
  178.  */
  179. #define IO_SET_TRANSFER_TABLE            "IOSetTransferTable"
  180. #define IO_2BPP_TRANSFER_TABLE_SIZE        4
  181. #define IO_8BPP_TRANSFER_TABLE_SIZE        256
  182. #define IO_12BPP_TRANSFER_TABLE_SIZE        16
  183. #define IO_15BPP_TRANSFER_TABLE_SIZE        32
  184. #define IO_24BPP_TRANSFER_TABLE_SIZE        256
  185. #define IO_MAX_TRANSFER_TABLE_SIZE        256
  186.  
  187.  
  188. /* Bit 5 indicates if the device can perform a blit operation which
  189.  * moves a rectangle from a source position to a destination position
  190.  * on the screen.  Currently (12/94) the device must allow access to 
  191.  * the framebuffer while the blit is occuring or prevent access to the
  192.  * framebuffer from interfering with the blit operation. 
  193.  *
  194.  */
  195. #define IO_DISPLAY_CAN_BLIT        0x00000020
  196. #define IO_DISPLAY_BLIT_MASK        0x00000020
  197.  
  198. /*
  199.  * Don't use IO_DISPLAY_DO_BLIT unless IO_DISPLAY_CAN_BLIT is set.
  200.  *
  201.  * Drivers can return IO_R_RESOURCE if the blit is not available or fails.
  202.  * Users should be prepared to do the functional equivalent of the blit in
  203.  * software.
  204.  *
  205.  * Parameters for the setIntValues interface are:
  206.  * [0] = src_x; [1] = src_y;
  207.  * [2] = width; [3] = height;
  208.  * [4] = dst_x; [5] = dst_y;
  209.  */
  210. /* defines for setIntValues interface */
  211. #define IO_DISPLAY_DO_BLIT                   "IODisplayDoBlit"
  212. #define IO_DISPLAY_BLIT_SIZE            6
  213.  
  214. #define IO_GET_DISPLAY_PORT            "IOGetDisplayPort"
  215. #define IO_GET_DISPLAY_PORT_SIZE        1
  216.  
  217. #define IO_GET_DISPLAY_INFO            "IOGetDisplayInfo"
  218.  
  219. #define IO_GET_DISPLAY_MEMORY            "IOGetDisplayMemory"
  220. #define IO_GET_RAMDAC_SPEED            "IOGetRAMDACSpeed"
  221.  
  222. #define IO_SET_PENDING_DISPLAY_MODE        "IOSelectPendingDisplayMode"
  223. #define IO_GET_PENDING_DISPLAY_MODE        "IOGetPendingDisplayMode"
  224. #define IO_GET_CURRENT_DISPLAY_MODE        "IOGetCurrentDisplayMode"
  225. #define IO_COMMIT_TO_PENDING_DISPLAY_MODE    "IOCommitToPendingDisplayMode"
  226. #define IO_GET_DISPLAY_MODE_NUM            "IOGetDisplayModeNum"
  227. #define IO_GET_DISPLAY_MODE_INFO        "IOGetDisplayModeInfo:"
  228.  
  229. #endif    /* __DISPLAYDEFS_H__ */
  230.