15bd8deadSopenharmony_ciName
25bd8deadSopenharmony_ci
35bd8deadSopenharmony_ci    NV_present_video
45bd8deadSopenharmony_ci
55bd8deadSopenharmony_ciName Strings
65bd8deadSopenharmony_ci
75bd8deadSopenharmony_ci    GL_NV_present_video
85bd8deadSopenharmony_ci    GLX_NV_present_video
95bd8deadSopenharmony_ci    WGL_NV_present_video
105bd8deadSopenharmony_ci
115bd8deadSopenharmony_ciContributors
125bd8deadSopenharmony_ci
135bd8deadSopenharmony_ci    James Jones
145bd8deadSopenharmony_ci    Jeff Juliano
155bd8deadSopenharmony_ci    Robert Morell
165bd8deadSopenharmony_ci    Aaron Plattner
175bd8deadSopenharmony_ci    Andy Ritger
185bd8deadSopenharmony_ci    Thomas True
195bd8deadSopenharmony_ci    Ian Williams
205bd8deadSopenharmony_ci
215bd8deadSopenharmony_ciContact
225bd8deadSopenharmony_ci
235bd8deadSopenharmony_ci    James Jones, NVIDIA (jajones 'at' nvidia.com)
245bd8deadSopenharmony_ci
255bd8deadSopenharmony_ciStatus
265bd8deadSopenharmony_ci
275bd8deadSopenharmony_ci    Implemented in 165.33 driver for NVIDIA SDI devices.
285bd8deadSopenharmony_ci
295bd8deadSopenharmony_ciVersion
305bd8deadSopenharmony_ci
315bd8deadSopenharmony_ci    Last Modified Date: July 8, 2011
325bd8deadSopenharmony_ci    Author Revision: 8
335bd8deadSopenharmony_ci    $Date$ $Revision$
345bd8deadSopenharmony_ci
355bd8deadSopenharmony_ciNumber
365bd8deadSopenharmony_ci
375bd8deadSopenharmony_ci    347
385bd8deadSopenharmony_ci
395bd8deadSopenharmony_ciDependencies
405bd8deadSopenharmony_ci
415bd8deadSopenharmony_ci    OpenGL 1.1 is required.
425bd8deadSopenharmony_ci
435bd8deadSopenharmony_ci    ARB_occlusion_query is required.
445bd8deadSopenharmony_ci    EXT_timer_query is required.
455bd8deadSopenharmony_ci    ARB_texture_compression affects the definition of this extension.
465bd8deadSopenharmony_ci    ARB_texture_float affects the definition of this extension.
475bd8deadSopenharmony_ci    GLX_NV_video_out affects the definition of this extension.
485bd8deadSopenharmony_ci    EXT_framebuffer_object affects the definition of this extension.
495bd8deadSopenharmony_ci    WGL_ARB_extensions_string affects the definition of this extension.
505bd8deadSopenharmony_ci    WGL_NV_video_out affects the definition of this extension.
515bd8deadSopenharmony_ci
525bd8deadSopenharmony_ci    This extension is written against the OpenGL 2.1 Specification
535bd8deadSopenharmony_ci    and the GLX 1.4 Specification.
545bd8deadSopenharmony_ci
555bd8deadSopenharmony_ciOverview
565bd8deadSopenharmony_ci
575bd8deadSopenharmony_ci    This extension provides a mechanism for displaying textures and
585bd8deadSopenharmony_ci    renderbuffers on auxiliary video output devices.  It allows an
595bd8deadSopenharmony_ci    application to specify separate buffers for the individual
605bd8deadSopenharmony_ci    fields used with interlaced output.  It also provides a way
615bd8deadSopenharmony_ci    to present frames or field pairs simultaneously in two separate
625bd8deadSopenharmony_ci    video streams.  It also allows an application to request when images
635bd8deadSopenharmony_ci    should be displayed, and to obtain feedback on exactly when images
645bd8deadSopenharmony_ci    are actually first displayed.
655bd8deadSopenharmony_ci
665bd8deadSopenharmony_ci    This specification attempts to avoid language that would tie it to
675bd8deadSopenharmony_ci    any particular hardware or vendor.  However, it should be noted that
685bd8deadSopenharmony_ci    it has been designed specifically for use with NVIDIA SDI products
695bd8deadSopenharmony_ci    and the features and limitations of the spec compliment those of
705bd8deadSopenharmony_ci    NVIDIA's line of SDI video output devices.
715bd8deadSopenharmony_ci
725bd8deadSopenharmony_ciNew Procedures and Functions
735bd8deadSopenharmony_ci
745bd8deadSopenharmony_ci    void PresentFrameKeyedNV(uint video_slot,
755bd8deadSopenharmony_ci                             uint64EXT minPresentTime,
765bd8deadSopenharmony_ci                             uint beginPresentTimeId,
775bd8deadSopenharmony_ci                             uint presentDurationId,
785bd8deadSopenharmony_ci                             enum type,
795bd8deadSopenharmony_ci                             enum target0, uint fill0, uint key0,
805bd8deadSopenharmony_ci                             enum target1, uint fill1, uint key1);
815bd8deadSopenharmony_ci
825bd8deadSopenharmony_ci    void PresentFrameDualFillNV(uint video_slot,
835bd8deadSopenharmony_ci                                uint64EXT minPresentTime,
845bd8deadSopenharmony_ci                                uint beginPresentTimeId,
855bd8deadSopenharmony_ci                                uint presentDurationId,
865bd8deadSopenharmony_ci                                enum type,
875bd8deadSopenharmony_ci                                enum target0, uint fill0,
885bd8deadSopenharmony_ci                                enum target1, uint fill1,
895bd8deadSopenharmony_ci                                enum target2, uint fill2,
905bd8deadSopenharmony_ci                                enum target3, uint fill3);
915bd8deadSopenharmony_ci
925bd8deadSopenharmony_ci    void GetVideoivNV(uint video_slot, enum pname, int *params);
935bd8deadSopenharmony_ci    void GetVideouivNV(uint video_slot, enum pname, uint *params);
945bd8deadSopenharmony_ci    void GetVideoi64vNV(uint video_slot, enum pname, int64EXT *params);
955bd8deadSopenharmony_ci    void GetVideoui64vNV(uint video_slot, enum pname,
965bd8deadSopenharmony_ci                         uint64EXT *params);
975bd8deadSopenharmony_ci
985bd8deadSopenharmony_ci
995bd8deadSopenharmony_ci    unsigned int *glXEnumerateVideoDevicesNV(Display *dpy, int screen,
1005bd8deadSopenharmony_ci                                             int *nelements);
1015bd8deadSopenharmony_ci    int glXBindVideoDeviceNV(Display *dpy, unsigned int video_slot,
1025bd8deadSopenharmony_ci                             unsigned int video_device,
1035bd8deadSopenharmony_ci                             const int *attrib_list);
1045bd8deadSopenharmony_ci
1055bd8deadSopenharmony_ci
1065bd8deadSopenharmony_ci    DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);
1075bd8deadSopenharmony_ci
1085bd8deadSopenharmony_ci    int wglEnumerateVideoDevicesNV(HDC hDc,
1095bd8deadSopenharmony_ci                                   HVIDEOOUTPUTDEVICENV *phDeviceList);
1105bd8deadSopenharmony_ci    BOOL wglBindVideoDeviceNV(HDC hDc, unsigned int uVideoSlot,
1115bd8deadSopenharmony_ci                              HVIDEOOUTPUTDEVICENV hVideoDevice,
1125bd8deadSopenharmony_ci                              const int *piAttribList);
1135bd8deadSopenharmony_ci    BOOL wglQueryCurrentContextNV(int iAttribute, int *piValue);
1145bd8deadSopenharmony_ci
1155bd8deadSopenharmony_ciNew Tokens
1165bd8deadSopenharmony_ci
1175bd8deadSopenharmony_ci    Accepted by the <type> parameter of PresentFrameKeyedNV and
1185bd8deadSopenharmony_ci    PresentFrameDualFillNV:
1195bd8deadSopenharmony_ci
1205bd8deadSopenharmony_ci        FRAME_NV                        0x8E26
1215bd8deadSopenharmony_ci        FIELDS_NV                       0x8E27
1225bd8deadSopenharmony_ci
1235bd8deadSopenharmony_ci    Accepted by the <pname> parameter of GetVideoivNV, GetVideouivNV,
1245bd8deadSopenharmony_ci    GetVideoi64vNV, GetVideoui64vNV:
1255bd8deadSopenharmony_ci
1265bd8deadSopenharmony_ci        CURRENT_TIME_NV                 0x8E28
1275bd8deadSopenharmony_ci        NUM_FILL_STREAMS_NV             0x8E29
1285bd8deadSopenharmony_ci
1295bd8deadSopenharmony_ci    Accepted by the <target> parameter of GetQueryiv:
1305bd8deadSopenharmony_ci
1315bd8deadSopenharmony_ci        PRESENT_TIME_NV                 0x8E2A
1325bd8deadSopenharmony_ci        PRESENT_DURATION_NV             0x8E2B
1335bd8deadSopenharmony_ci
1345bd8deadSopenharmony_ci    Accepted by the <attribute> parameter of glXQueryContext:
1355bd8deadSopenharmony_ci
1365bd8deadSopenharmony_ci        GLX_NUM_VIDEO_SLOTS_NV          0x20F0
1375bd8deadSopenharmony_ci
1385bd8deadSopenharmony_ci    Accepted by the <iAttribute> parameter of wglQueryCurrentContextNV:
1395bd8deadSopenharmony_ci
1405bd8deadSopenharmony_ci        WGL_NUM_VIDEO_SLOTS_NV          0x20F0
1415bd8deadSopenharmony_ci
1425bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 2.1 Specification (OpenGL Operation)
1435bd8deadSopenharmony_ci
1445bd8deadSopenharmony_ci    None
1455bd8deadSopenharmony_ci
1465bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 2.1 Specification (Rasterization)
1475bd8deadSopenharmony_ci
1485bd8deadSopenharmony_ci    None
1495bd8deadSopenharmony_ci
1505bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 2.1 Specification (Per-Fragment Operations and the Framebuffer)
1515bd8deadSopenharmony_ci
1525bd8deadSopenharmony_ci    Add a new section after Section 4.4:
1535bd8deadSopenharmony_ci
1545bd8deadSopenharmony_ci    "4.5 Displaying Buffers
1555bd8deadSopenharmony_ci
1565bd8deadSopenharmony_ci    "To queue the display of a set of textures or renderbuffers on one
1575bd8deadSopenharmony_ci    of the current video output devices, call one of:
1585bd8deadSopenharmony_ci
1595bd8deadSopenharmony_ci        void PresentFrameKeyedNV(uint video_slot,
1605bd8deadSopenharmony_ci                                 uint64EXT minPresentTime,
1615bd8deadSopenharmony_ci                                 uint beginPresentTimeId,
1625bd8deadSopenharmony_ci                                 uint presentDurationId,
1635bd8deadSopenharmony_ci                                 enum type,
1645bd8deadSopenharmony_ci                                 enum target0, uint fill0, uint key0,
1655bd8deadSopenharmony_ci                                 enum target1, uint fill1, uint key1);
1665bd8deadSopenharmony_ci
1675bd8deadSopenharmony_ci        void PresentFrameDualFillNV(uint video_slot,
1685bd8deadSopenharmony_ci                                    uint64EXT minPresentTime,
1695bd8deadSopenharmony_ci                                    uint beginPresentTimeId,
1705bd8deadSopenharmony_ci                                    uint presentDurationId,
1715bd8deadSopenharmony_ci                                    enum type,
1725bd8deadSopenharmony_ci                                    enum target0, uint fill0,
1735bd8deadSopenharmony_ci                                    enum target1, uint fill1,
1745bd8deadSopenharmony_ci                                    enum target2, uint fill2,
1755bd8deadSopenharmony_ci                                    enum target3, uint fill3);
1765bd8deadSopenharmony_ci
1775bd8deadSopenharmony_ci    "PresentFrameKeyedNV can only be used when one output stream
1785bd8deadSopenharmony_ci    is being used for color data.  Key data will be presented on the
1795bd8deadSopenharmony_ci    second output stream.  PresentFrameDualFillNV can be used only when
1805bd8deadSopenharmony_ci    two output streams are being used for color data.  It will present
1815bd8deadSopenharmony_ci    separate color images on each stream simultaneously.
1825bd8deadSopenharmony_ci
1835bd8deadSopenharmony_ci    "The <video_slot> parameter specifies which video output slot
1845bd8deadSopenharmony_ci    in the current context this frame should be presented on.  If no
1855bd8deadSopenharmony_ci    video output device is bound at <video_slot> at the time of the
1865bd8deadSopenharmony_ci    call, INVALID_OPERATION is generated.
1875bd8deadSopenharmony_ci
1885bd8deadSopenharmony_ci    "The value of <minPresentTime> can be set to either the earliest
1895bd8deadSopenharmony_ci    time in nanoseconds that the frame should become visible, or the
1905bd8deadSopenharmony_ci    special value 0.  Frame presentation is always queued until the
1915bd8deadSopenharmony_ci    video output's vertical blanking period.  At that time, the video
1925bd8deadSopenharmony_ci    output device will consume the frames in the queue in the order
1935bd8deadSopenharmony_ci    they were queued until it finds a frame qualified for display.  A
1945bd8deadSopenharmony_ci    frame is qualified if it meets one of the following criteria:
1955bd8deadSopenharmony_ci
1965bd8deadSopenharmony_ci       1) The frame's minimum presentation time is the special value
1975bd8deadSopenharmony_ci          zero.
1985bd8deadSopenharmony_ci
1995bd8deadSopenharmony_ci       2) The frame's minimum presentation time is less than or equal
2005bd8deadSopenharmony_ci          to the current time and the next queued frame, if it exists,
2015bd8deadSopenharmony_ci          has a minimum presentation time greater than the current time.
2025bd8deadSopenharmony_ci
2035bd8deadSopenharmony_ci    Any consumed frames not displayed are discarded.  If no qualified
2045bd8deadSopenharmony_ci    frames are found, the current frame continues to display.
2055bd8deadSopenharmony_ci
2065bd8deadSopenharmony_ci    "If <beginPresentTimeId> or <presentDurationId> are non-zero, they
2075bd8deadSopenharmony_ci    must name valid query objects (see section 4.1.7, Asynchronous
2085bd8deadSopenharmony_ci    Queries).  The actual time at which the video output device began
2095bd8deadSopenharmony_ci    displaying this frame will be stored in the object referred to by
2105bd8deadSopenharmony_ci    <beginPresentTimeId>.  The present frame operations will implicitly
2115bd8deadSopenharmony_ci    perform the equivalent of:
2125bd8deadSopenharmony_ci
2135bd8deadSopenharmony_ci        BeginQuery(PRESENT_TIME_NV, <beginPresentTimeId>);
2145bd8deadSopenharmony_ci        BeginQuery(PRESENT_DURATION_NV, <presentDurationId>);
2155bd8deadSopenharmony_ci
2165bd8deadSopenharmony_ci    when the respective query object names are valid, followed by the
2175bd8deadSopenharmony_ci    actual present operation, then an implicit EndQuery() for each
2185bd8deadSopenharmony_ci    query started.  The result can then be obtained asynchronously via
2195bd8deadSopenharmony_ci    the GetQueryObject calls with a <target> of PRESENT_TIME_NV or
2205bd8deadSopenharmony_ci    PRESENT_DURATION_NV.  The results of a query on the PRESENT_TIME_NV
2215bd8deadSopenharmony_ci    target will be the time in nanoseconds when the frame was first
2225bd8deadSopenharmony_ci    started scanning out, and will become available at that time.  The
2235bd8deadSopenharmony_ci    results of a query on the PRESENT_DURATION_NV target will be the
2245bd8deadSopenharmony_ci    number of times this frame was fully scanned out by the video output
2255bd8deadSopenharmony_ci    device and will become available when the subsequent frame begins
2265bd8deadSopenharmony_ci    scanning out.
2275bd8deadSopenharmony_ci
2285bd8deadSopenharmony_ci    "If the frame was removed from the queue without being displayed,
2295bd8deadSopenharmony_ci    the present duration will be zero, and the present time will refer
2305bd8deadSopenharmony_ci    to the time in nanoseconds when the first subsequent frame that was
2315bd8deadSopenharmony_ci    not skipped began scanning out.
2325bd8deadSopenharmony_ci
2335bd8deadSopenharmony_ci    "The query targets PRESENT_TIME_NV and PRESENT_DURATION_NV may not
2345bd8deadSopenharmony_ci    be explicitly used with BeginQuery or EndQuery.  Attempting to do
2355bd8deadSopenharmony_ci    so will generate INVALID_ENUM.
2365bd8deadSopenharmony_ci
2375bd8deadSopenharmony_ci    "The parameters <type>, <target0>, <fill0>, <key0>, <target1>,
2385bd8deadSopenharmony_ci    <fill1>, and <key1> define the data to be displayed on the first
2395bd8deadSopenharmony_ci    video output stream.  Valid values for <type> are FIELDS_NV or
2405bd8deadSopenharmony_ci    FRAME_NV.  Other values will generate INVALID_ENUM.  The <target0>
2415bd8deadSopenharmony_ci    and <target1> parameters can each be one of TEXTURE_2D,
2425bd8deadSopenharmony_ci    TEXTURE_RECTANGLE, RENDERBUFFER_EXT, or NONE.  Other values will
2435bd8deadSopenharmony_ci    generate INVALID_ENUM.  The <fill0> and <fill1> parameters then name
2445bd8deadSopenharmony_ci    an object of the corresponding type from which the color data will
2455bd8deadSopenharmony_ci    be read.  Similarly, <key0> and <key1> name an object from which key
2465bd8deadSopenharmony_ci    channel data will be read.  If <type> is FIELDS_NV <target0> and
2475bd8deadSopenharmony_ci    <target1> can not be NONE and <fill0>, and <fill1> must both name
2485bd8deadSopenharmony_ci    valid image objects or INVALID_VALUE is generated.  If <type> is
2495bd8deadSopenharmony_ci    FRAME_NV <target0> can not be NONE and <fill0> must name a valid
2505bd8deadSopenharmony_ci    object or INVALID_VALUE is generated.  Additionally, <target1> must
2515bd8deadSopenharmony_ci    be NONE or INVALID_ENUM is generated.  The values of <fill1> and
2525bd8deadSopenharmony_ci    <key1> are ignored.
2535bd8deadSopenharmony_ci
2545bd8deadSopenharmony_ci    "A texture object is considered a valid color image object only if
2555bd8deadSopenharmony_ci    it is consistent and has a supported internal format.  A
2565bd8deadSopenharmony_ci    renderbuffer object is considered a valid image object if its
2575bd8deadSopenharmony_ci    internal format has been specified as one of those supported.
2585bd8deadSopenharmony_ci    Implementations must support at least the following internal formats
2595bd8deadSopenharmony_ci    for presenting color buffers:
2605bd8deadSopenharmony_ci
2615bd8deadSopenharmony_ci        RGB
2625bd8deadSopenharmony_ci        RGBA
2635bd8deadSopenharmony_ci        RGB16F_ARB
2645bd8deadSopenharmony_ci        RGBA16F_ARB
2655bd8deadSopenharmony_ci        RGB32F_ARB
2665bd8deadSopenharmony_ci        RGBA32F_ARB
2675bd8deadSopenharmony_ci        LUMINANCE
2685bd8deadSopenharmony_ci        LUMINANCE_AlPHA
2695bd8deadSopenharmony_ci
2705bd8deadSopenharmony_ci    If no separate key object is specified when using a key output
2715bd8deadSopenharmony_ci    stream, the key data is taken from the alpha channel of the color
2725bd8deadSopenharmony_ci    object if it is present, or is set to 1.0 otherwise.
2735bd8deadSopenharmony_ci    Implementations must support at least the following internal formats
2745bd8deadSopenharmony_ci    when presenting key stream buffers:
2755bd8deadSopenharmony_ci
2765bd8deadSopenharmony_ci        RGBA
2775bd8deadSopenharmony_ci        RGBA16F_ARB
2785bd8deadSopenharmony_ci        RGBA32F_ARB
2795bd8deadSopenharmony_ci        LUMINANCE_AlPHA
2805bd8deadSopenharmony_ci        DEPTH_COMPONENT
2815bd8deadSopenharmony_ci
2825bd8deadSopenharmony_ci    "The key values are read from the alpha channel unless a depth
2835bd8deadSopenharmony_ci    format is used.  For depth formats, the key value is the depth
2845bd8deadSopenharmony_ci    value.
2855bd8deadSopenharmony_ci
2865bd8deadSopenharmony_ci    "It is legal to use the same image for more than one of <fill0>,
2875bd8deadSopenharmony_ci    <fill1>, <key0>, and <key1>.
2885bd8deadSopenharmony_ci
2895bd8deadSopenharmony_ci    "In the following section, which discusses image dimension
2905bd8deadSopenharmony_ci    requirements, the image objects named by <fill0> and <key0> are
2915bd8deadSopenharmony_ci    collectively referred to as 'image 0' and the image objects named by
2925bd8deadSopenharmony_ci    <fill1> and <key1> are collectively referred to as 'image 1'.  The
2935bd8deadSopenharmony_ci    dimensions of a pair of fill and key images must be equal.  If using
2945bd8deadSopenharmony_ci    PresentFrameDualFillNV, 'image 0' refers only to <fill0>, and
2955bd8deadSopenharmony_ci    'image 1' refers only to <fill1>.
2965bd8deadSopenharmony_ci
2975bd8deadSopenharmony_ci    "If <type> is FRAME_NV image 1 must have a height equal to the
2985bd8deadSopenharmony_ci    number of lines displayed per frame on the output device and a width
2995bd8deadSopenharmony_ci    equal to the number of pixels per line on the output device or
3005bd8deadSopenharmony_ci    INVALID_VALUE will be generated.  Each line in the image will
3015bd8deadSopenharmony_ci    correspond to a line displayed on the output device.
3025bd8deadSopenharmony_ci
3035bd8deadSopenharmony_ci    "If <type> is FIELDS_NV, the way in which lines from the image are
3045bd8deadSopenharmony_ci    displayed depends on the image's size.  If progressive output is in
3055bd8deadSopenharmony_ci    use, image 0 and image 1 must either both have a height equal to the
3065bd8deadSopenharmony_ci    number of lines displayed per frame, or both have a height equal to
3075bd8deadSopenharmony_ci    the ceiling of half the number of lines displayed per frame.  If an
3085bd8deadSopenharmony_ci    interlaced output is in use, the images must either both have a
3095bd8deadSopenharmony_ci    height equal to the number of lines displayed per frame, or image 0
3105bd8deadSopenharmony_ci    must have a height equal to the number of lines in field one and
3115bd8deadSopenharmony_ci    image 1 must have a height equal to the number of lines in field
3125bd8deadSopenharmony_ci    two.  The images must both have a width equal to the number of
3135bd8deadSopenharmony_ci    pixels per line on the output device.  If any of these conditions
3145bd8deadSopenharmony_ci    are not met, INVALID_VALUE is generated.
3155bd8deadSopenharmony_ci
3165bd8deadSopenharmony_ci    "If progressive output is used, the lines are displayed as follows:
3175bd8deadSopenharmony_ci    If the images are the same height as a frame, the resulting frame
3185bd8deadSopenharmony_ci    displayed is comprised of the first line of image 0, followed by
3195bd8deadSopenharmony_ci    the second line of image 1, followed by the third line of image 0,
3205bd8deadSopenharmony_ci    and so on until all the lines of a frame have been displayed.  If
3215bd8deadSopenharmony_ci    the images are half the height of the frame, the resulting frame
3225bd8deadSopenharmony_ci    displayed is comprised of the first line of image 0, followed by the
3235bd8deadSopenharmony_ci    first line of image 1, followed by the second line of image 0, and
3245bd8deadSopenharmony_ci    so on until the number of lines per frame has been displayed.
3255bd8deadSopenharmony_ci
3265bd8deadSopenharmony_ci    "If interlaced output is used and the images are the same height as
3275bd8deadSopenharmony_ci    a frame, the order in which lines are chosen from the images
3285bd8deadSopenharmony_ci    depends on the video output mode in use.  If the video output mode
3295bd8deadSopenharmony_ci    specifies field 1 as containing the first line of the display, the
3305bd8deadSopenharmony_ci    first line of field 1 will come from the first line of image 0,
3315bd8deadSopenharmony_ci    followed by the third line from image 0, and so on until the entire
3325bd8deadSopenharmony_ci    first field has been displayed.  The first line of field 2 will come
3335bd8deadSopenharmony_ci    from the second line of image 1, followed by the fourth line of
3345bd8deadSopenharmony_ci    image 1, and so on until the entire second field is displayed.  If
3355bd8deadSopenharmony_ci    the mode specifies field 1 as containing the second line of the
3365bd8deadSopenharmony_ci    display, the first line of field 1 will come from the second line of
3375bd8deadSopenharmony_ci    image 0, followed by the fourth line of image 0, and so on until the
3385bd8deadSopenharmony_ci    entire first field is displayed.  The first line of field 2 will
3395bd8deadSopenharmony_ci    come from the first line of image 1, followed by the third line of
3405bd8deadSopenharmony_ci    image 1, and so on until the entire second field is displayed.
3415bd8deadSopenharmony_ci
3425bd8deadSopenharmony_ci    "If interlaced output is used and the images are the same height as
3435bd8deadSopenharmony_ci    individual fields, the order of lines used does not depend on the
3445bd8deadSopenharmony_ci    mode in use.  Regardless of the mode used the first line of the
3455bd8deadSopenharmony_ci    first field will come from the first line of image 0, followed by
3465bd8deadSopenharmony_ci    the second line of image 0, and so on until the entire first field
3475bd8deadSopenharmony_ci    has been displayed.  The first line of the second field will come
3485bd8deadSopenharmony_ci    from the first line of image 1, followed by the second line of
3495bd8deadSopenharmony_ci    image 1, and so on until the entire second field has been displayed.
3505bd8deadSopenharmony_ci
3515bd8deadSopenharmony_ci    "The parameters <target2>, <fill2>, <target3>, and <fill3> are used
3525bd8deadSopenharmony_ci    identically to <target0>, <fill0>, <target1>, and <fill1>
3535bd8deadSopenharmony_ci    respectively, but they operate on the second color video output
3545bd8deadSopenharmony_ci    stream.
3555bd8deadSopenharmony_ci
3565bd8deadSopenharmony_ci    "If the implementation requires a copy as part of the present frame
3575bd8deadSopenharmony_ci    operation, the copy will be transparent to the user and as such will
3585bd8deadSopenharmony_ci    bypass the fragment pipeline completely and will not alter any GL
3595bd8deadSopenharmony_ci    state."
3605bd8deadSopenharmony_ci
3615bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 2.1 Specification (Special Functions)
3625bd8deadSopenharmony_ci
3635bd8deadSopenharmony_ci    (Add to section 5.4, "Display Lists", page 244, in the list of
3645bd8deadSopenharmony_ci    commands that are not compiled into display lists)
3655bd8deadSopenharmony_ci
3665bd8deadSopenharmony_ci    "Display commands: PresentFrameKeyedNV, PresentFrameDualFillNV
3675bd8deadSopenharmony_ci
3685bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 2.1 Specification (State and
3695bd8deadSopenharmony_ciState Requests)
3705bd8deadSopenharmony_ci
3715bd8deadSopenharmony_ci    (In section 6.1.12, Asynchronous Queries, add the following after
3725bd8deadSopenharmony_ci    paragraph 6, p. 254)
3735bd8deadSopenharmony_ci
3745bd8deadSopenharmony_ci    For present time queries (PRESENT_TIME_NV), if the minimum number of
3755bd8deadSopenharmony_ci    bits is non-zero, it must be at least 64.
3765bd8deadSopenharmony_ci
3775bd8deadSopenharmony_ci    For present duration queries (PRESENT_DURATION_NV, if the minimum
3785bd8deadSopenharmony_ci    number of bits is non-zero, it must be at least 1.
3795bd8deadSopenharmony_ci
3805bd8deadSopenharmony_ci
3815bd8deadSopenharmony_ci    (Replace section 6.1.15, Saving and Restoring State, p. 264)
3825bd8deadSopenharmony_ci
3835bd8deadSopenharmony_ci    Section 6.1.15, Video Output Queries
3845bd8deadSopenharmony_ci
3855bd8deadSopenharmony_ci    Information about a video slot can be queried with the commands
3865bd8deadSopenharmony_ci
3875bd8deadSopenharmony_ci        void GetVideoivNV(uint video_slot enum pname, int *params);
3885bd8deadSopenharmony_ci        void GetVideouivNV(uint video_slot enum pname, uint *params);
3895bd8deadSopenharmony_ci        void GetVideoi64vNV(uint video_slot enum pname,
3905bd8deadSopenharmony_ci                            int64EXT *params);
3915bd8deadSopenharmony_ci        void GetVideoui64vNV(uint video_slot enum pname,
3925bd8deadSopenharmony_ci                             uint64EXT *params);
3935bd8deadSopenharmony_ci
3945bd8deadSopenharmony_ci    If <video_slot> is not a valid video slot in the current context or
3955bd8deadSopenharmony_ci    no video output device is currently bound at <video_slot> an
3965bd8deadSopenharmony_ci    INVALID_OPERATION is generated.  If <pname> is CURRENT_TIME_NV, the
3975bd8deadSopenharmony_ci    current time on the video output device in nanoseconds is returned
3985bd8deadSopenharmony_ci    in <params>.  If the time value can not be expressed without using
3995bd8deadSopenharmony_ci    more bits than are available in <params>, the value is truncated.
4005bd8deadSopenharmony_ci    If <pname> is NUM_FILL_STREAMS_NV, the number of active video output
4015bd8deadSopenharmony_ci    streams is returned in <params>.
4025bd8deadSopenharmony_ci
4035bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 2.1 Specification (Invariance)
4045bd8deadSopenharmony_ci
4055bd8deadSopenharmony_ci    None
4065bd8deadSopenharmony_ci
4075bd8deadSopenharmony_ciAdditions to the WGL Specification
4085bd8deadSopenharmony_ci
4095bd8deadSopenharmony_ci    Add a new section "Video Output Devices"
4105bd8deadSopenharmony_ci
4115bd8deadSopenharmony_ci    "WGL video output devices can be used to display images with more
4125bd8deadSopenharmony_ci    fine-grained control over the presentation than wglSwapBuffers
4135bd8deadSopenharmony_ci    allows.  Use
4145bd8deadSopenharmony_ci
4155bd8deadSopenharmony_ci        int wglEnumerateVideoDevicesNV(HDC hDc,
4165bd8deadSopenharmony_ci                                       HVIDEOOUTPUTDEVICENV *phDeviceList);
4175bd8deadSopenharmony_ci
4185bd8deadSopenharmony_ci    to enumerate the available video output devices.
4195bd8deadSopenharmony_ci
4205bd8deadSopenharmony_ci    "This call returns the number of video devices available on <hDC>.
4215bd8deadSopenharmony_ci    If <phDeviceList> is non-NULL, an array of valid device handles
4225bd8deadSopenharmony_ci    will be returned in it.  The function will assume <phDeviceList> is
4235bd8deadSopenharmony_ci    large enough to hold all available handles so the application should
4245bd8deadSopenharmony_ci    take care to first query the number of devices present and allocate
4255bd8deadSopenharmony_ci    an appropriate amount of memory.
4265bd8deadSopenharmony_ci
4275bd8deadSopenharmony_ci    "To bind a video output device to the current context, use
4285bd8deadSopenharmony_ci
4295bd8deadSopenharmony_ci        BOOL wglBindVideoDeviceNV(HDC hDc, unsigned int uVideoSlot,
4305bd8deadSopenharmony_ci                                  HVIDEOOUTPUTDEVICENV hVideoDevice,
4315bd8deadSopenharmony_ci                                  const int *piAttribList);
4325bd8deadSopenharmony_ci
4335bd8deadSopenharmony_ci    "wglBindVideoDeviceNV binds the video output device specified by
4345bd8deadSopenharmony_ci    <hVideoDevice> to one of the context's available video output slots
4355bd8deadSopenharmony_ci    specified by <uVideoSlot>.  <piAttribList> is a set of attribute
4365bd8deadSopenharmony_ci    name-value pairs that affects the bind operation.  Currently there
4375bd8deadSopenharmony_ci    are no valid attributes so <piAttribList> must be either NULL or an
4385bd8deadSopenharmony_ci    empty list.  To release a video device without binding another
4395bd8deadSopenharmony_ci    device to the same slot, call wglBindVideoDeviceNV with
4405bd8deadSopenharmony_ci    <hVideoDevice> set to NULL.  The bound video output device will be
4415bd8deadSopenharmony_ci    enabled before wglBindVideoDeviceNV returns.  It will display black
4425bd8deadSopenharmony_ci    until the first image is presented on it.  The previously bound
4435bd8deadSopenharmony_ci    video device, if any, will also be deactivated before
4445bd8deadSopenharmony_ci    wglBindVIdeoDeviceNV resturns.  Video slot 0 is reserved for the GL.
4455bd8deadSopenharmony_ci    If wglBindVideoDeviceNV is called with <uVideoSlot> less than 1 or
4465bd8deadSopenharmony_ci    greater than the maximum number of video slots supported by the
4475bd8deadSopenharmony_ci    current context, if <hVideoDevice> does not refer to a valid video
4485bd8deadSopenharmony_ci    output device, or if there is no current context, FALSE will be
4495bd8deadSopenharmony_ci    returned.  A return value of TRUE indicates a video device has
4505bd8deadSopenharmony_ci    successfully been bound to the video slot.
4515bd8deadSopenharmony_ci
4525bd8deadSopenharmony_ci
4535bd8deadSopenharmony_ci    Add section "Querying WGL context attributes"
4545bd8deadSopenharmony_ci
4555bd8deadSopenharmony_ci    To query an attribute associated with the current WGL context, use
4565bd8deadSopenharmony_ci
4575bd8deadSopenharmony_ci        BOOL wglQueryCurrentContextNV(int iAttribute, int *piValue);
4585bd8deadSopenharmony_ci
4595bd8deadSopenharmony_ci    wglQueryCurrentContextNV will place the value of the attribute named
4605bd8deadSopenharmony_ci    by <iAttribute> in the memory pointed to by <piValue>.  If there is
4615bd8deadSopenharmony_ci    no context current or <iAttribute> does not name a valid attribute,
4625bd8deadSopenharmony_ci    FALSE will be returned and the memory pointed to by <piValue> will
4635bd8deadSopenharmony_ci    not be changed.  Currently the only valid attribute name is
4645bd8deadSopenharmony_ci    WGL_NUM_VIDEO_SLOTS_NV.  This attribute contains the number of valid
4655bd8deadSopenharmony_ci    video output slots in the current context.
4665bd8deadSopenharmony_ci
4675bd8deadSopenharmony_ci
4685bd8deadSopenharmony_ciAdditions to Chapter 2 of the GLX 1.4 Specification (GLX Operation)
4695bd8deadSopenharmony_ci
4705bd8deadSopenharmony_ci    None
4715bd8deadSopenharmony_ci
4725bd8deadSopenharmony_ciAdditions to Chapter 3 of the GLX 1.4 Specification (Functions and Errors)
4735bd8deadSopenharmony_ci
4745bd8deadSopenharmony_ci    Modify table 3.5:
4755bd8deadSopenharmony_ci
4765bd8deadSopenharmony_ci    Attribute               Type  Description
4775bd8deadSopenharmony_ci    ----------------------  ----  ------------------------------------------
4785bd8deadSopenharmony_ci    GLX_FBCONFIG_ID         XID   XID of GLXFBConfig associated with context
4795bd8deadSopenharmony_ci    GLX_RENDER_TYPE         int   type of rendering supported
4805bd8deadSopenharmony_ci    GLX_SCREEN              int   screen number
4815bd8deadSopenharmony_ci    GLX_NUM_VIDEO_SLOTS_NV  int   number of video output slots this context supports
4825bd8deadSopenharmony_ci
4835bd8deadSopenharmony_ci
4845bd8deadSopenharmony_ci    Add a section between Sections 3.3.10 and 3.3.11:
4855bd8deadSopenharmony_ci
4865bd8deadSopenharmony_ci    3.3.10a  Video Output Devices
4875bd8deadSopenharmony_ci
4885bd8deadSopenharmony_ci    "GLX video output devices can be used to display images with more
4895bd8deadSopenharmony_ci    fine-grained control over the presentation than glXSwapBuffers
4905bd8deadSopenharmony_ci    allows.  Use
4915bd8deadSopenharmony_ci
4925bd8deadSopenharmony_ci        unsigned int *glXEnumerateVideoDevicesNV(Display *dpy,
4935bd8deadSopenharmony_ci                                                 int screen,
4945bd8deadSopenharmony_ci                                                 int *nElements);
4955bd8deadSopenharmony_ci
4965bd8deadSopenharmony_ci    to enumerate the available video output devices.
4975bd8deadSopenharmony_ci
4985bd8deadSopenharmony_ci    "This call returns an array of unsigned ints.  The number of
4995bd8deadSopenharmony_ci    elements in the array is returned in nElements.  Each entry in the
5005bd8deadSopenharmony_ci    array names a valid video output device.  Use XFree to free the
5015bd8deadSopenharmony_ci    memory returned by glXEnumerateVideoDevicesNV.
5025bd8deadSopenharmony_ci
5035bd8deadSopenharmony_ci    "To bind a video output device to the current context, use
5045bd8deadSopenharmony_ci
5055bd8deadSopenharmony_ci        Bool glXBindVideoDeviceNV(Display *dpy,
5065bd8deadSopenharmony_ci                                  unsigned int video_slot,
5075bd8deadSopenharmony_ci                                  unsigned int video_device,
5085bd8deadSopenharmony_ci                                  const int *attrib_list);
5095bd8deadSopenharmony_ci
5105bd8deadSopenharmony_ci    "glXBindVideoDeviceNV binds the video output device specified
5115bd8deadSopenharmony_ci    by <video_device> to one of the context's available video
5125bd8deadSopenharmony_ci    output slots specified by <video_slot>.  <attrib_list> is a
5135bd8deadSopenharmony_ci    set of attribute name-value pairs that affects the bind
5145bd8deadSopenharmony_ci    operation.  Currently there are no valid attributes so <attrib_list>
5155bd8deadSopenharmony_ci    must be either NULL or an empty list.  To release a video device
5165bd8deadSopenharmony_ci    without binding another device to the same slot, call
5175bd8deadSopenharmony_ci    glXBindVideoDeviceNV with <video_device> set to "0".  Video slot 0
5185bd8deadSopenharmony_ci    is reserved for the GL.  The bound video output device will be
5195bd8deadSopenharmony_ci    enabled before glXBindVideoDeviceNV returns.  It will display black
5205bd8deadSopenharmony_ci    until the first image is presented on it.  The previously bound
5215bd8deadSopenharmony_ci    video device, if any, will also be deactivated before
5225bd8deadSopenharmony_ci    glXBindVIdeoDeviceNV resturns.  If glXBindVideoDeviceNV is called
5235bd8deadSopenharmony_ci    with <video_slot> less than 1 or greater than the maximum number of
5245bd8deadSopenharmony_ci    video slots supported by the current context, BadValue is generated.
5255bd8deadSopenharmony_ci    If <video_device> does not refer to a valid video output device,
5265bd8deadSopenharmony_ci    BadValue is generated.  If <attrib_list> contains an invalid
5275bd8deadSopenharmony_ci    attribute or an invalid attribute value, BadValue is generated.  If
5285bd8deadSopenharmony_ci    glXBindVideoDeviceNV is called without a current context,
5295bd8deadSopenharmony_ci    GLXBadContext is generated.
5305bd8deadSopenharmony_ci
5315bd8deadSopenharmony_ci
5325bd8deadSopenharmony_ciAdditions to Chapter 4 of the GLX 1.4 Specification (Encoding on the X
5335bd8deadSopenharmony_ciByte Stream)
5345bd8deadSopenharmony_ci
5355bd8deadSopenharmony_ci    None
5365bd8deadSopenharmony_ci
5375bd8deadSopenharmony_ciAdditions to Chapter 5 of the GLX 1.4 Specification (Extending OpenGL)
5385bd8deadSopenharmony_ci
5395bd8deadSopenharmony_ci    None
5405bd8deadSopenharmony_ci
5415bd8deadSopenharmony_ciAdditions to Chapter 6 of the GLX 1.4 Specification (GLX Versions)
5425bd8deadSopenharmony_ci
5435bd8deadSopenharmony_ci    None
5445bd8deadSopenharmony_ci
5455bd8deadSopenharmony_ciGLX Protocol
5465bd8deadSopenharmony_ci
5475bd8deadSopenharmony_ci    BindVideoDeviceNV
5485bd8deadSopenharmony_ci        1       CARD8                   opcode (X assigned)
5495bd8deadSopenharmony_ci        1       17                      GLX opcode (glXVendorPrivateWithReply)
5505bd8deadSopenharmony_ci        2       6+n                     request length
5515bd8deadSopenharmony_ci        4       1332                    vendor specific opcode
5525bd8deadSopenharmony_ci        4       CARD32                  context tag
5535bd8deadSopenharmony_ci        4       CARD32                  video_slot
5545bd8deadSopenharmony_ci        4       CARD32                  video_device
5555bd8deadSopenharmony_ci        4       CARD32                  num_attribs
5565bd8deadSopenharmony_ci        4*n     LISTofATTRIBUTE_PAIR    attribute, value pairs
5575bd8deadSopenharmony_ci      =>
5585bd8deadSopenharmony_ci        1       CARD8                   reply
5595bd8deadSopenharmony_ci        1                               unused
5605bd8deadSopenharmony_ci        2       CARD16                  sequence number
5615bd8deadSopenharmony_ci        4       0                       reply length
5625bd8deadSopenharmony_ci        4       CARD32                  status
5635bd8deadSopenharmony_ci        20                              unused
5645bd8deadSopenharmony_ci
5655bd8deadSopenharmony_ci    EnumerateVideoDevicesNV
5665bd8deadSopenharmony_ci        1       CARD8                   opcode (X assigned)
5675bd8deadSopenharmony_ci        1       17                      GLX opcode (glXVendorPrivateWithReply)
5685bd8deadSopenharmony_ci        2       4                       request length
5695bd8deadSopenharmony_ci        4       1333                    vendor specific opcode
5705bd8deadSopenharmony_ci        4                               unused
5715bd8deadSopenharmony_ci        4       CARD32                  screen
5725bd8deadSopenharmony_ci      =>
5735bd8deadSopenharmony_ci        1       CARD8                   reply
5745bd8deadSopenharmony_ci        1                               unused
5755bd8deadSopenharmony_ci        2       CARD16                  sequence number
5765bd8deadSopenharmony_ci        4       n                       reply length
5775bd8deadSopenharmony_ci        4       CARD32                  num_devices
5785bd8deadSopenharmony_ci        4*n     LISTofCARD32            device names
5795bd8deadSopenharmony_ci
5805bd8deadSopenharmony_ci    PresentFrameKeyedNV
5815bd8deadSopenharmony_ci        1       CARD8                   opcode (X assigned)
5825bd8deadSopenharmony_ci        1       16                      GLX opcode (glXVendorPrivate)
5835bd8deadSopenharmony_ci        2       15                      request length
5845bd8deadSopenharmony_ci        4       1334                    vendor specific opcode
5855bd8deadSopenharmony_ci        4       CARD32                  context tag
5865bd8deadSopenharmony_ci        8       CARD64                  minPresentTime
5875bd8deadSopenharmony_ci        4       CARD32                  video_slot
5885bd8deadSopenharmony_ci        4       CARD32                  beginPresentTimeId
5895bd8deadSopenharmony_ci        4       CARD32                  presentDurationId
5905bd8deadSopenharmony_ci        4       CARD32                  type
5915bd8deadSopenharmony_ci        4       CARD32                  target0
5925bd8deadSopenharmony_ci        4       CARD32                  fill0
5935bd8deadSopenharmony_ci        4       CARD32                  key0
5945bd8deadSopenharmony_ci        4       CARD32                  target1
5955bd8deadSopenharmony_ci        4       CARD32                  fill1
5965bd8deadSopenharmony_ci        4       CARD32                  key1
5975bd8deadSopenharmony_ci
5985bd8deadSopenharmony_ci    PresentFrameDualFillNV
5995bd8deadSopenharmony_ci        1       CARD8                   opcode (X assigned)
6005bd8deadSopenharmony_ci        1       16                      GLX opcode (glXVendorPrivate)
6015bd8deadSopenharmony_ci        2       17                      request length
6025bd8deadSopenharmony_ci        4       1335                    vendor specific opcode
6035bd8deadSopenharmony_ci        4       CARD32                  context tag
6045bd8deadSopenharmony_ci        8       CARD64                  minPresentTime
6055bd8deadSopenharmony_ci        4       CARD32                  video_slot
6065bd8deadSopenharmony_ci        4       CARD32                  beginPresentTimeId
6075bd8deadSopenharmony_ci        4       CARD32                  presentDurationId
6085bd8deadSopenharmony_ci        4       CARD32                  type
6095bd8deadSopenharmony_ci        4       CARD32                  target0
6105bd8deadSopenharmony_ci        4       CARD32                  fill0
6115bd8deadSopenharmony_ci        4       CARD32                  target1
6125bd8deadSopenharmony_ci        4       CARD32                  fill1
6135bd8deadSopenharmony_ci        4       CARD32                  target2
6145bd8deadSopenharmony_ci        4       CARD32                  fill2
6155bd8deadSopenharmony_ci        4       CARD32                  target3
6165bd8deadSopenharmony_ci        4       CARD32                  fill3
6175bd8deadSopenharmony_ci
6185bd8deadSopenharmony_ci    GetVideoivNV
6195bd8deadSopenharmony_ci        1       CARD8                   opcode (X assigned)
6205bd8deadSopenharmony_ci        1       17                      GLX opcode (glXVendorPrivateWithReply)
6215bd8deadSopenharmony_ci        2       4                       request length
6225bd8deadSopenharmony_ci        4       1336                    vendor specific opcode
6235bd8deadSopenharmony_ci        4       CARD32                  context tag
6245bd8deadSopenharmony_ci        4       CARD32                  video_slot
6255bd8deadSopenharmony_ci        4       CARD32                  pname
6265bd8deadSopenharmony_ci      =>
6275bd8deadSopenharmony_ci        1       CARD8                   reply
6285bd8deadSopenharmony_ci        1                               unused
6295bd8deadSopenharmony_ci        2       CARD16                  sequence number
6305bd8deadSopenharmony_ci        4       m                       reply length, m = (n==1 ? 0 : n)
6315bd8deadSopenharmony_ci        4                               unused
6325bd8deadSopenharmony_ci        4       CARD32                  n
6335bd8deadSopenharmony_ci
6345bd8deadSopenharmony_ci        if (n=1) this follows:
6355bd8deadSopenharmony_ci
6365bd8deadSopenharmony_ci        4       INT32                   params
6375bd8deadSopenharmony_ci        12                              unused
6385bd8deadSopenharmony_ci
6395bd8deadSopenharmony_ci        otherwise this follows:
6405bd8deadSopenharmony_ci
6415bd8deadSopenharmony_ci        16                              unused
6425bd8deadSopenharmony_ci        n*4     LISTofINT32             params
6435bd8deadSopenharmony_ci
6445bd8deadSopenharmony_ci    GetVideouivNV
6455bd8deadSopenharmony_ci        1       CARD8                   opcode (X assigned)
6465bd8deadSopenharmony_ci        1       17                      GLX opcode (glXVendorPrivateWithReply)
6475bd8deadSopenharmony_ci        2       4                       request length
6485bd8deadSopenharmony_ci        4       1337                    vendor specific opcode
6495bd8deadSopenharmony_ci        4       CARD32                  context tag
6505bd8deadSopenharmony_ci        4       CARD32                  video_slot
6515bd8deadSopenharmony_ci        4       CARD32                  pname
6525bd8deadSopenharmony_ci      =>
6535bd8deadSopenharmony_ci        1       CARD8                   reply
6545bd8deadSopenharmony_ci        1                               unused
6555bd8deadSopenharmony_ci        2       CARD16                  sequence number
6565bd8deadSopenharmony_ci        4       m                       reply length, m = (n==1 ? 0 : n)
6575bd8deadSopenharmony_ci        4                               unused
6585bd8deadSopenharmony_ci        4       CARD32                  n
6595bd8deadSopenharmony_ci
6605bd8deadSopenharmony_ci        if (n=1) this follows:
6615bd8deadSopenharmony_ci
6625bd8deadSopenharmony_ci        4       CARD32                  params
6635bd8deadSopenharmony_ci        12                              unused
6645bd8deadSopenharmony_ci
6655bd8deadSopenharmony_ci        otherwise this follows:
6665bd8deadSopenharmony_ci
6675bd8deadSopenharmony_ci        16                              unused
6685bd8deadSopenharmony_ci        n*4     LISTofCARD32            params
6695bd8deadSopenharmony_ci
6705bd8deadSopenharmony_ci    GetVideoi64vNV
6715bd8deadSopenharmony_ci        1       CARD8                   opcode (X assigned)
6725bd8deadSopenharmony_ci        1       17                      GLX opcode (glXVendorPrivateWithReply)
6735bd8deadSopenharmony_ci        2       4                       request length
6745bd8deadSopenharmony_ci        4       1338                    vendor specific opcode
6755bd8deadSopenharmony_ci        4       CARD32                  context tag
6765bd8deadSopenharmony_ci        4       CARD32                  video_slot
6775bd8deadSopenharmony_ci        4       CARD32                  pname
6785bd8deadSopenharmony_ci      =>
6795bd8deadSopenharmony_ci        1       CARD8                   reply
6805bd8deadSopenharmony_ci        1                               unused
6815bd8deadSopenharmony_ci        2       CARD16                  sequence number
6825bd8deadSopenharmony_ci        4       m                       reply length, m = (n==1 ? 0 : n)
6835bd8deadSopenharmony_ci        4                               unused
6845bd8deadSopenharmony_ci        4       CARD32                  n
6855bd8deadSopenharmony_ci
6865bd8deadSopenharmony_ci        if (n=1) this follows:
6875bd8deadSopenharmony_ci
6885bd8deadSopenharmony_ci        8       INT64                   params
6895bd8deadSopenharmony_ci        8                               unused
6905bd8deadSopenharmony_ci
6915bd8deadSopenharmony_ci        otherwise this follows:
6925bd8deadSopenharmony_ci
6935bd8deadSopenharmony_ci        16                              unused
6945bd8deadSopenharmony_ci        n*8     LISTofINT64EXT          params
6955bd8deadSopenharmony_ci
6965bd8deadSopenharmony_ci    GetVideoui64vNV
6975bd8deadSopenharmony_ci        1       CARD8                   opcode (X assigned)
6985bd8deadSopenharmony_ci        1       17                      GLX opcode (glXVendorPrivateWithReply)
6995bd8deadSopenharmony_ci        2       4                       request length
7005bd8deadSopenharmony_ci        4       1339                    vendor specific opcode
7015bd8deadSopenharmony_ci        4       CARD32                  context tag
7025bd8deadSopenharmony_ci        4       CARD32                  video_slot
7035bd8deadSopenharmony_ci        4       CARD32                  pname
7045bd8deadSopenharmony_ci      =>
7055bd8deadSopenharmony_ci        1       CARD8                   reply
7065bd8deadSopenharmony_ci        1                               unused
7075bd8deadSopenharmony_ci        2       CARD16                  sequence number
7085bd8deadSopenharmony_ci        4       m                       reply length, m = (n==1 ? 0 : n)
7095bd8deadSopenharmony_ci        4                               unused
7105bd8deadSopenharmony_ci        4       CARD32                  n
7115bd8deadSopenharmony_ci
7125bd8deadSopenharmony_ci        if (n=1) this follows:
7135bd8deadSopenharmony_ci
7145bd8deadSopenharmony_ci        8       CARD64                  params
7155bd8deadSopenharmony_ci        8                               unused
7165bd8deadSopenharmony_ci
7175bd8deadSopenharmony_ci        otherwise this follows:
7185bd8deadSopenharmony_ci
7195bd8deadSopenharmony_ci        16                              unused
7205bd8deadSopenharmony_ci        n*8     LISTofCARD64            params
7215bd8deadSopenharmony_ci
7225bd8deadSopenharmony_ci
7235bd8deadSopenharmony_ciDependencies on ARB_occlusion_query:
7245bd8deadSopenharmony_ci
7255bd8deadSopenharmony_ci    The generic query objects introduced in ARB_occlusion_query are
7265bd8deadSopenharmony_ci    used as a method to asynchronously deliver timing data to the
7275bd8deadSopenharmony_ci    application.  The language describing BeginQueryARB and
7285bd8deadSopenharmony_ci    EndQueryARB API is also relevant as the same operations are
7295bd8deadSopenharmony_ci    implicitly performed by PresentFrameKeyedNV and
7305bd8deadSopenharmony_ci    PresentFrameDualFillNV.
7315bd8deadSopenharmony_ci
7325bd8deadSopenharmony_ciDependencies on EXT_timer_query:
7335bd8deadSopenharmony_ci
7345bd8deadSopenharmony_ci    The 64-bit types introduced in EXT_timer_query are used in this
7355bd8deadSopenharmony_ci    extension to specify time values with nanosecond accuracy.
7365bd8deadSopenharmony_ci
7375bd8deadSopenharmony_ciDependencies on ARB_texture_float
7385bd8deadSopenharmony_ci
7395bd8deadSopenharmony_ci    If ARB_texture_float is not supported, the floating point internal
7405bd8deadSopenharmony_ci    formats are removed from the list of internal formats required to be
7415bd8deadSopenharmony_ci    supported by the PresentFrame functions.
7425bd8deadSopenharmony_ci
7435bd8deadSopenharmony_ciDependencies on EXT_framebuffer_object:
7445bd8deadSopenharmony_ci
7455bd8deadSopenharmony_ci    If EXT_framebuffer_object is not supported, all references to
7465bd8deadSopenharmony_ci    targets of type RENDERBUFFER_EXT should be removed from the spec
7475bd8deadSopenharmony_ci    language.
7485bd8deadSopenharmony_ci
7495bd8deadSopenharmony_ciDependencies on GLX_NV_video_out:
7505bd8deadSopenharmony_ci
7515bd8deadSopenharmony_ci    Video output resources can not be used simultaneously with this
7525bd8deadSopenharmony_ci    extension and GLX_NV_video_out.  If an application on the system has
7535bd8deadSopenharmony_ci    obtained a video device handle from GLX_NV_video_out, no other
7545bd8deadSopenharmony_ci    application may bind any video out devices using this spec until all
7555bd8deadSopenharmony_ci    GLX_NV_video_out devices have been released.  Similarly, if an
7565bd8deadSopenharmony_ci    application has bound a video out device using this spec, no other
7575bd8deadSopenharmony_ci    applications on the system can obtain a GLX_NV_video_out device
7585bd8deadSopenharmony_ci    handle until all devices have been unbound.
7595bd8deadSopenharmony_ci
7605bd8deadSopenharmony_ciDependencies on WGL_ARB_extensions_string:
7615bd8deadSopenharmony_ci
7625bd8deadSopenharmony_ci    Because there is no way to extend wgl, these calls are defined in
7635bd8deadSopenharmony_ci    the ICD and can be called by obtaining the address with
7645bd8deadSopenharmony_ci    wglGetProcAddress.  The WGL extension string is not included in the
7655bd8deadSopenharmony_ci    GL_EXTENSIONS string.  Its existence can be determined with the
7665bd8deadSopenharmony_ci    WGL_ARB_extensions_string extension.
7675bd8deadSopenharmony_ci
7685bd8deadSopenharmony_ciDependencies on WGL_NV_video_out:
7695bd8deadSopenharmony_ci
7705bd8deadSopenharmony_ci    Video output resources can not be used simultaneously with this
7715bd8deadSopenharmony_ci    extension and WGL_NV_video_out.  If an application on the system has
7725bd8deadSopenharmony_ci    obtained a video device handle from WGL_NV_video_out, no other
7735bd8deadSopenharmony_ci    application may bind any video out devices using this spec until all
7745bd8deadSopenharmony_ci    WGL_NV_video_out devices have been released.  Similarly, if an
7755bd8deadSopenharmony_ci    application has bound a video out device using this spec, no other
7765bd8deadSopenharmony_ci    applications on the system can obtain a WGL_NV_video_out device
7775bd8deadSopenharmony_ci    handle until all devices have been unbound.
7785bd8deadSopenharmony_ci
7795bd8deadSopenharmony_ci
7805bd8deadSopenharmony_ciErrors
7815bd8deadSopenharmony_ci
7825bd8deadSopenharmony_ci    
7835bd8deadSopenharmony_ci
7845bd8deadSopenharmony_ciNew State
7855bd8deadSopenharmony_ci
7865bd8deadSopenharmony_ci    Get Value                   Type  Get Command       Init. Value    Description                Sec    Attribute
7875bd8deadSopenharmony_ci    --------------------------  ----  ----------------  -------------  -------------------------  -----  ---------
7885bd8deadSopenharmony_ci    CURRENT_QUERY               4xZ+  GetQueryiv        0              Active query object name   4.1.7  -
7895bd8deadSopenharmony_ci                                                                         (occlusion, timer,
7905bd8deadSopenharmony_ci                                                                          present time, and
7915bd8deadSopenharmony_ci                                                                          present duration)
7925bd8deadSopenharmony_ci    QUERY_RESULT                4xZ+  GetQueryObjectiv  0              Query object result        4.1.7  -
7935bd8deadSopenharmony_ci                                                                         (samples passed,
7945bd8deadSopenharmony_ci                                                                          time elapsed,
7955bd8deadSopenharmony_ci                                                                          present time, or
7965bd8deadSopenharmony_ci                                                                          present duration)
7975bd8deadSopenharmony_ci    QUERY_RESULT_AVAILABLE      4xB   GetQueryObjectiv  TRUE           Query object result        4.1.7  -
7985bd8deadSopenharmony_ci                                                                         available?
7995bd8deadSopenharmony_ci    CURRENT_TIME_NV             1xZ   GetVideoui64vNV   0              Video device timer         4.4    -
8005bd8deadSopenharmony_ci
8015bd8deadSopenharmony_ci
8025bd8deadSopenharmony_ciNew Implementation Dependent state
8035bd8deadSopenharmony_ci
8045bd8deadSopenharmony_ci    Get Value               Type  Get Command       Minimum Value   Description                 Sec    Attribute
8055bd8deadSopenharmony_ci    ----------------------  ----  ----------------  --------------  --------------------------  -----  ---------
8065bd8deadSopenharmony_ci    NUM_FILL_STREAMS_NV     1xZ   GetVideouivNV     0               Number of video streams     4.4    -
8075bd8deadSopenharmony_ci                                                                      active on a video slot
8085bd8deadSopenharmony_ci    NUM_VIDEO_SLOTS_NV      1xZ   GetIntegerv       1               Number of video slots a     4.4    -
8095bd8deadSopenharmony_ci                                                                      context supports.
8105bd8deadSopenharmony_ci    QUERY_COUNTER_BITS      4xZ+  GetQueryiv        see 6.1.12      Asynchronous query counter  6.1.12 -
8115bd8deadSopenharmony_ci                                                                      bits (occlusion, timer,
8125bd8deadSopenharmony_ci                                                                      present time and present
8135bd8deadSopenharmony_ci                                                                      duration queries)
8145bd8deadSopenharmony_ci
8155bd8deadSopenharmony_ci
8165bd8deadSopenharmony_ciIssues
8175bd8deadSopenharmony_ci
8185bd8deadSopenharmony_ci    1) How does the user enumerate video devices?
8195bd8deadSopenharmony_ci
8205bd8deadSopenharmony_ci        RESOLVED: There will be OS-specific functions that
8215bd8deadSopenharmony_ci        will enumerate OS-specific identifiers that refer to video
8225bd8deadSopenharmony_ci        devices.  On WGL, this will likely be tied to an hDC.  GPU
8235bd8deadSopenharmony_ci        affinity can then be used to enumerate SDI devices even on GPUs
8245bd8deadSopenharmony_ci        that are not used as part of the windows desktop.  On GLX,
8255bd8deadSopenharmony_ci        SDI devices can be enumerated per X screen.
8265bd8deadSopenharmony_ci
8275bd8deadSopenharmony_ci    2) How does the user specify data for the second output?
8285bd8deadSopenharmony_ci
8295bd8deadSopenharmony_ci        RESOLVED:  There will be a separate entry point that accepts up
8305bd8deadSopenharmony_ci        to 4 buffers total.
8315bd8deadSopenharmony_ci
8325bd8deadSopenharmony_ci    3) When is SDI output actually enabled?
8335bd8deadSopenharmony_ci
8345bd8deadSopenharmony_ci        RESOLVED: The BindVideoDevice functions will enable and disable
8355bd8deadSopenharmony_ci        SDI output.
8365bd8deadSopenharmony_ci
8375bd8deadSopenharmony_ci    4) Should the PresentFrame functions return the frame
8385bd8deadSopenharmony_ci       count/identifier?
8395bd8deadSopenharmony_ci
8405bd8deadSopenharmony_ci        RESOLVED: No.  PresentFrame will instead accept two query
8415bd8deadSopenharmony_ci        object IDs and will implicitly begin and end a query on each
8425bd8deadSopenharmony_ci        of these objects.  The first object's query target will be
8435bd8deadSopenharmony_ci        PRESENT_TIME_EXT.  Its result will be the time in nanoseconds
8445bd8deadSopenharmony_ci        when the frame was first displayed, and will become available
8455bd8deadSopenharmony_ci        when the frame begins displaying or when a subsequent frame
8465bd8deadSopenharmony_ci        begins displaying if this frame be skipped.  The second
8475bd8deadSopenharmony_ci        object's query target will be PRESENT_LENGTH_EXT.  The result
8485bd8deadSopenharmony_ci        will be the number of full-frame vblanks that occurred while
8495bd8deadSopenharmony_ci        the frame was displayed.  This result will become available when
8505bd8deadSopenharmony_ci        the next frame begins displaying.  If the frame was skipped,
8515bd8deadSopenharmony_ci        this value will be 0 and the PRESENT_TIME_EXT result will refer
8525bd8deadSopenharmony_ci        to the time when the first subsequent frame that was not skipped
8535bd8deadSopenharmony_ci        began displaying.
8545bd8deadSopenharmony_ci
8555bd8deadSopenharmony_ci    5) Should there be any other queryable video output device
8565bd8deadSopenharmony_ci       attributes?
8575bd8deadSopenharmony_ci
8585bd8deadSopenharmony_ci        RESOLVED: There are none.  The glXQueryVideoDeviceNV and
8595bd8deadSopenharmony_ci        wglQueryVideoDeviceNV calls have been removed from this
8605bd8deadSopenharmony_ci        specification.  They can be added in a separate extension if
8615bd8deadSopenharmony_ci        they are ever needed.
8625bd8deadSopenharmony_ci
8635bd8deadSopenharmony_ci    6) Should this spec require a timed present mechanism?
8645bd8deadSopenharmony_ci
8655bd8deadSopenharmony_ci        RESOLVED: Yes, this spec will include a mechanism for presenting
8665bd8deadSopenharmony_ci        frames at a specified absolute time and a method for querying
8675bd8deadSopenharmony_ci        when frames were displayed to allow apps to adjust their
8685bd8deadSopenharmony_ci        rendering time.  Leaving this out would weaken the PresentFrame
8695bd8deadSopenharmony_ci        mechanism considerably.
8705bd8deadSopenharmony_ci
8715bd8deadSopenharmony_ci    7) Should this specification allow downsampling as part of the
8725bd8deadSopenharmony_ci       present operation.
8735bd8deadSopenharmony_ci
8745bd8deadSopenharmony_ci        RESOLVED: No, this functionality can retroactively be added to
8755bd8deadSopenharmony_ci        the PresentFrame functions as part of a later spec if necessary.
8765bd8deadSopenharmony_ci
8775bd8deadSopenharmony_ci    8) What happens when two outputs are enabled but only one output's
8785bd8deadSopenharmony_ci       worth of buffers are specified?
8795bd8deadSopenharmony_ci
8805bd8deadSopenharmony_ci        RESOLVED: This will be an invalid operation.  If two outputs are
8815bd8deadSopenharmony_ci        enabled, data must be presented on both of them for every frame.
8825bd8deadSopenharmony_ci
8835bd8deadSopenharmony_ci    9) What section of the spec should the PresentFrame functions be in?
8845bd8deadSopenharmony_ci
8855bd8deadSopenharmony_ci        RESOLVED: A new section has been added to Chapter 4 to describe
8865bd8deadSopenharmony_ci        functions that control the displaying of buffers.
8875bd8deadSopenharmony_ci
8885bd8deadSopenharmony_ci    10) What should this extension be called?
8895bd8deadSopenharmony_ci
8905bd8deadSopenharmony_ci        RESOLVED: The original name for this specification was
8915bd8deadSopenharmony_ci        NV_video_framebuffer because the motivation for creating this
8925bd8deadSopenharmony_ci        extension came from the need to expose a method for sending
8935bd8deadSopenharmony_ci        framebuffer objects to an SDI video output device.  However, it
8945bd8deadSopenharmony_ci        has grown beyond that purpose and no longer even requires
8955bd8deadSopenharmony_ci        EXT_framebuffer_object to function.  For these reasons, it has
8965bd8deadSopenharmony_ci        been renamed NV_present_video.
8975bd8deadSopenharmony_ci
8985bd8deadSopenharmony_ci    11) Should a "stacked fields" mode be added to allow the application
8995bd8deadSopenharmony_ci        to specify two fields vertically concatenated in one buffer?
9005bd8deadSopenharmony_ci
9015bd8deadSopenharmony_ci        RESOLVED: No.  The stacked fields in previous extensions were a
9025bd8deadSopenharmony_ci        workaround to allow the application to specify two fields at
9035bd8deadSopenharmony_ci        once with an API that only accepted one image at a time.  Since
9045bd8deadSopenharmony_ci        this extension requires all buffers that make up a frame to be
9055bd8deadSopenharmony_ci        specified simultaneously, stacked fields are not needed.
9065bd8deadSopenharmony_ci
9075bd8deadSopenharmony_ci    12) Should there be a separate function for presenting output data
9085bd8deadSopenharmony_ci        for one stream?
9095bd8deadSopenharmony_ci
9105bd8deadSopenharmony_ci        RESOLVED: Yes.  To clarify the different types of data needed
9115bd8deadSopenharmony_ci        for single and dual stream modes, two separate entry points are
9125bd8deadSopenharmony_ci        provided.
9135bd8deadSopenharmony_ci
9145bd8deadSopenharmony_ci    13) Should we allow users to override the mode-defined mapping
9155bd8deadSopenharmony_ci        between frame-height buffer lines and field lines?
9165bd8deadSopenharmony_ci
9175bd8deadSopenharmony_ci        RESOLVED: No.  Not only does this seem unnecessary, it is also
9185bd8deadSopenharmony_ci        impractical.  If a mode has an odd number of lines, the
9195bd8deadSopenharmony_ci        application would need to specify incorrectly sized buffers to
9205bd8deadSopenharmony_ci        satisfy the line choosing rules as they are specified currently.
9215bd8deadSopenharmony_ci
9225bd8deadSopenharmony_ciRevision History
9235bd8deadSopenharmony_ci
9245bd8deadSopenharmony_ci    Revision 8, 2011/7/8
9255bd8deadSopenharmony_ci        -Fix wglBindVideoDeviceNV specification to match implemented
9265bd8deadSopenharmony_ci         behavior.
9275bd8deadSopenharmony_ci
9285bd8deadSopenharmony_ci    Revision 7, 2009/2/20
9295bd8deadSopenharmony_ci        -Remove unused VideoParameterivNV command.
9305bd8deadSopenharmony_ci
9315bd8deadSopenharmony_ci    Revision 6, 2008/2/20
9325bd8deadSopenharmony_ci        -Public specification
933