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