15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci NV_transform_feedback 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_NV_transform_feedback 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContributors 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Cliff Woolley 125bd8deadSopenharmony_ci Nick Carter 135bd8deadSopenharmony_ci 145bd8deadSopenharmony_ciContact 155bd8deadSopenharmony_ci 165bd8deadSopenharmony_ci Barthold Lichtenbelt (blichtenbelt 'at' nvidia.com) 175bd8deadSopenharmony_ci Pat Brown (pbrown 'at' nvidia.com) 185bd8deadSopenharmony_ci Eric Werness (ewerness 'at' nvidia.com) 195bd8deadSopenharmony_ci 205bd8deadSopenharmony_ciStatus 215bd8deadSopenharmony_ci 225bd8deadSopenharmony_ci Shipping for GeForce 8 Series (November 2006) 235bd8deadSopenharmony_ci 245bd8deadSopenharmony_ciVersion 255bd8deadSopenharmony_ci 265bd8deadSopenharmony_ci Last Modified Date: 03/09/2011 275bd8deadSopenharmony_ci NVIDIA Revision: 18 285bd8deadSopenharmony_ci 295bd8deadSopenharmony_ciNumber 305bd8deadSopenharmony_ci 315bd8deadSopenharmony_ci 341 325bd8deadSopenharmony_ci 335bd8deadSopenharmony_ciDependencies 345bd8deadSopenharmony_ci 355bd8deadSopenharmony_ci OpenGL 1.5 is required. 365bd8deadSopenharmony_ci 375bd8deadSopenharmony_ci This extension interacts with EXT_timer_query. 385bd8deadSopenharmony_ci 395bd8deadSopenharmony_ci NV_vertex_program4, NV_geometry_program4 and NV_gpu_program4 affect this 405bd8deadSopenharmony_ci extension. 415bd8deadSopenharmony_ci 425bd8deadSopenharmony_ci EXT_geometry_shader4 trivially interacts with this extension. 435bd8deadSopenharmony_ci 445bd8deadSopenharmony_ci This extension has an OpenGL Shading Language component. As such it 455bd8deadSopenharmony_ci interacts with ARB_shader_objects and OpenGL 2.0. 465bd8deadSopenharmony_ci 475bd8deadSopenharmony_ci This extension is written against the OpenGL 2.0 specification. 485bd8deadSopenharmony_ci 495bd8deadSopenharmony_ciOverview 505bd8deadSopenharmony_ci 515bd8deadSopenharmony_ci This extension provides a new mode to the GL, called transform feedback, 525bd8deadSopenharmony_ci which records vertex attributes of the primitives processed by the GL. 535bd8deadSopenharmony_ci The selected attributes are written into buffer objects, and can be 545bd8deadSopenharmony_ci written with each attribute in a separate buffer object or with all 555bd8deadSopenharmony_ci attributes interleaved into a single buffer object. If a geometry program 565bd8deadSopenharmony_ci or shader is active, the primitives recorded are those emitted by the 575bd8deadSopenharmony_ci geometry program. Otherwise, transform feedback captures primitives whose 585bd8deadSopenharmony_ci vertex are transformed by a vertex program or shader, or by fixed-function 595bd8deadSopenharmony_ci vertex processing. In either case, the primitives captured are those 605bd8deadSopenharmony_ci generated prior to clipping. Transform feedback mode is capable of 615bd8deadSopenharmony_ci capturing transformed vertex data generated by fixed-function vertex 625bd8deadSopenharmony_ci processing, outputs from assembly vertex or geometry programs, or varying 635bd8deadSopenharmony_ci variables emitted from GLSL vertex or geometry shaders. 645bd8deadSopenharmony_ci 655bd8deadSopenharmony_ci The vertex data recorded in transform feedback mode is stored into buffer 665bd8deadSopenharmony_ci objects as an array of vertex attributes. The regular representation and 675bd8deadSopenharmony_ci the use of buffer objects allows the recorded data to be processed 685bd8deadSopenharmony_ci directly by the GL without requiring CPU intervention to copy data. In 695bd8deadSopenharmony_ci particular, transform feedback data can be used for vertex arrays (via 705bd8deadSopenharmony_ci vertex buffer objects), as the source for pixel data (via pixel buffer 715bd8deadSopenharmony_ci objects), as program constant data (via the NV_parameter_buffer_object or 725bd8deadSopenharmony_ci EXT_bindable_uniform extension), or via any other extension that makes use 735bd8deadSopenharmony_ci of buffer objects. 745bd8deadSopenharmony_ci 755bd8deadSopenharmony_ci This extension introduces new query object support to allow transform 765bd8deadSopenharmony_ci feedback mode to operate asynchronously. Query objects allow applications 775bd8deadSopenharmony_ci to determine when transform feedback results are complete, as well as the 785bd8deadSopenharmony_ci number of primitives processed and written back to buffer objects while in 795bd8deadSopenharmony_ci transform feedback mode. This extension also provides a new rasterizer 805bd8deadSopenharmony_ci discard enable, which allows applications to use transform feedback to 815bd8deadSopenharmony_ci capture vertex attributes without rendering anything. 825bd8deadSopenharmony_ci 835bd8deadSopenharmony_ciNew Procedures and Functions 845bd8deadSopenharmony_ci 855bd8deadSopenharmony_ci void BindBufferRangeNV(enum target, uint index, uint buffer, 865bd8deadSopenharmony_ci intptr offset, sizeiptr size) 875bd8deadSopenharmony_ci void BindBufferOffsetNV(enum target, uint index, uint buffer, 885bd8deadSopenharmony_ci intptr offset) 895bd8deadSopenharmony_ci void BindBufferBaseNV(enum target, uint index, uint buffer) 905bd8deadSopenharmony_ci void TransformFeedbackAttribsNV(sizei count, const int *attribs, 915bd8deadSopenharmony_ci enum bufferMode) 925bd8deadSopenharmony_ci void TransformFeedbackVaryingsNV(uint program, sizei count, 935bd8deadSopenharmony_ci const int *locations, 945bd8deadSopenharmony_ci enum bufferMode) 955bd8deadSopenharmony_ci void BeginTransformFeedbackNV(enum primitiveMode) 965bd8deadSopenharmony_ci void EndTransformFeedbackNV() 975bd8deadSopenharmony_ci 985bd8deadSopenharmony_ci int GetVaryingLocationNV(uint program, const char *name) 995bd8deadSopenharmony_ci void GetActiveVaryingNV(uint program, uint index, 1005bd8deadSopenharmony_ci sizei bufSize, sizei *length, sizei *size, 1015bd8deadSopenharmony_ci enum *type, char *name) 1025bd8deadSopenharmony_ci void ActiveVaryingNV(uint program, const char *name) 1035bd8deadSopenharmony_ci void GetTransformFeedbackVaryingNV(uint program, uint index, 1045bd8deadSopenharmony_ci int *location) 1055bd8deadSopenharmony_ci 1065bd8deadSopenharmony_ci void GetIntegerIndexedvEXT(enum param, uint index, int *values); 1075bd8deadSopenharmony_ci void GetBooleanIndexedvEXT(enum param, uint index, boolean *values); 1085bd8deadSopenharmony_ci 1095bd8deadSopenharmony_ci (Note: These indexed query functions are provided in the EXT_draw_buffers2 1105bd8deadSopenharmony_ci extension. The boolean query is not useful for any queryable value in 1115bd8deadSopenharmony_ci this extension, but is supported for completeness and consistency with 1125bd8deadSopenharmony_ci base GL typed "Get" functions.) 1135bd8deadSopenharmony_ci 1145bd8deadSopenharmony_ci 1155bd8deadSopenharmony_ciNew Tokens 1165bd8deadSopenharmony_ci 1175bd8deadSopenharmony_ci Accepted by the <target> parameters of BindBuffer, BufferData, 1185bd8deadSopenharmony_ci BufferSubData, MapBuffer, UnmapBuffer, GetBufferSubData, 1195bd8deadSopenharmony_ci GetBufferPointerv, BindBufferRangeNV, BindBufferOffsetNV and 1205bd8deadSopenharmony_ci BindBufferBaseNV: 1215bd8deadSopenharmony_ci 1225bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E 1235bd8deadSopenharmony_ci 1245bd8deadSopenharmony_ci Accepted by the <param> parameter of GetIntegerIndexedvEXT and 1255bd8deadSopenharmony_ci GetBooleanIndexedvEXT: 1265bd8deadSopenharmony_ci 1275bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 1285bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 1295bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 1305bd8deadSopenharmony_ci 1315bd8deadSopenharmony_ci Accepted by the <param> parameter of GetIntegerIndexedvEXT and 1325bd8deadSopenharmony_ci GetBooleanIndexedvEXT, and by the <pname> parameter of GetBooleanv, 1335bd8deadSopenharmony_ci GetDoublev, GetIntegerv, and GetFloatv: 1345bd8deadSopenharmony_ci 1355bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F 1365bd8deadSopenharmony_ci 1375bd8deadSopenharmony_ci Accepted by the <bufferMode> parameter of TransformFeedbackAttribsNV and 1385bd8deadSopenharmony_ci TransformFeedbackVaryingsNV: 1395bd8deadSopenharmony_ci 1405bd8deadSopenharmony_ci INTERLEAVED_ATTRIBS_NV 0x8C8C 1415bd8deadSopenharmony_ci SEPARATE_ATTRIBS_NV 0x8C8D 1425bd8deadSopenharmony_ci 1435bd8deadSopenharmony_ci Accepted by the <target> parameter of BeginQuery, EndQuery, and 1445bd8deadSopenharmony_ci GetQueryiv: 1455bd8deadSopenharmony_ci 1465bd8deadSopenharmony_ci PRIMITIVES_GENERATED_NV 0x8C87 1475bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 1485bd8deadSopenharmony_ci 1495bd8deadSopenharmony_ci Accepted by the <cap> parameter of Enable, Disable, and IsEnabled, and by 1505bd8deadSopenharmony_ci the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and 1515bd8deadSopenharmony_ci GetDoublev: 1525bd8deadSopenharmony_ci 1535bd8deadSopenharmony_ci RASTERIZER_DISCARD_NV 0x8C89 1545bd8deadSopenharmony_ci 1555bd8deadSopenharmony_ci Accepted by the <pname> parameter of GetBooleanv, GetDoublev, GetIntegerv, 1565bd8deadSopenharmony_ci and GetFloatv: 1575bd8deadSopenharmony_ci 1585bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A 1595bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B 1605bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 1615bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E 1625bd8deadSopenharmony_ci 1635bd8deadSopenharmony_ci Accepted by the <pname> parameter of GetProgramiv: 1645bd8deadSopenharmony_ci 1655bd8deadSopenharmony_ci ACTIVE_VARYINGS_NV 0x8C81 1665bd8deadSopenharmony_ci ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 1675bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 1685bd8deadSopenharmony_ci 1695bd8deadSopenharmony_ci Accepted by the <pname> parameter of GetBooleanv, GetDoublev, GetIntegerv, 1705bd8deadSopenharmony_ci GetFloatv, and GetProgramiv: 1715bd8deadSopenharmony_ci 1725bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F 1735bd8deadSopenharmony_ci 1745bd8deadSopenharmony_ci Accepted by the <attribs> parameter of TransformFeedbackAttribsNV: 1755bd8deadSopenharmony_ci 1765bd8deadSopenharmony_ci BACK_PRIMARY_COLOR_NV 0x8C77 1775bd8deadSopenharmony_ci BACK_SECONDARY_COLOR_NV 0x8C78 1785bd8deadSopenharmony_ci TEXTURE_COORD_NV 0x8C79 1795bd8deadSopenharmony_ci CLIP_DISTANCE_NV 0x8C7A 1805bd8deadSopenharmony_ci VERTEX_ID_NV 0x8C7B 1815bd8deadSopenharmony_ci PRIMITIVE_ID_NV 0x8C7C 1825bd8deadSopenharmony_ci GENERIC_ATTRIB_NV 0x8C7D 1835bd8deadSopenharmony_ci POINT_SIZE 0x0B11 1845bd8deadSopenharmony_ci FOG_COORDINATE 0x8451 1855bd8deadSopenharmony_ci SECONDARY_COLOR_NV 0x852D 1865bd8deadSopenharmony_ci PRIMARY_COLOR 0x8577 1875bd8deadSopenharmony_ci POSITION 0x1203 1885bd8deadSopenharmony_ci LAYER_NV 0x8DAA 1895bd8deadSopenharmony_ci 1905bd8deadSopenharmony_ci (note: POINT_SIZE, FOG_COORDINATE, PRIMARY_COLOR, and POSITION are 1915bd8deadSopenharmony_ci defined in the core OpenGL specification; SECONDARY_COLOR_NV is defined 1925bd8deadSopenharmony_ci in NV_register_combiners.) 1935bd8deadSopenharmony_ci 1945bd8deadSopenharmony_ci Returned by the <type> parameter of GetActiveVaryingNV: 1955bd8deadSopenharmony_ci 1965bd8deadSopenharmony_ci UNSIGNED_INT_VEC2_EXT 0x8DC6 1975bd8deadSopenharmony_ci UNSIGNED_INT_VEC3_EXT 0x8DC7 1985bd8deadSopenharmony_ci UNSIGNED_INT_VEC4_EXT 0x8DC8 1995bd8deadSopenharmony_ci 2005bd8deadSopenharmony_ci (note: All three of these are defined in the EXT_gpu_shader4 2015bd8deadSopenharmony_ci extension.) 2025bd8deadSopenharmony_ci 2035bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 2.0 Specification (OpenGL 2045bd8deadSopenharmony_ciOperation) 2055bd8deadSopenharmony_ci 2065bd8deadSopenharmony_ci Insert three new sections between Sections 2.11, Coordinate Transforms and 2075bd8deadSopenharmony_ci 2.12, Clipping: 2085bd8deadSopenharmony_ci 2095bd8deadSopenharmony_ci (Move the "Asynchronous Queries" language out of Section 4.1.7) 2105bd8deadSopenharmony_ci 2115bd8deadSopenharmony_ci Section 2.X, Asynchronous Queries 2125bd8deadSopenharmony_ci 2135bd8deadSopenharmony_ci Asynchronous queries provide a mechanism to return information about the 2145bd8deadSopenharmony_ci processing of a sequence of GL commands. There are two query types 2155bd8deadSopenharmony_ci supported by the GL. Transform feedback queries (section 2.Y) returns 2165bd8deadSopenharmony_ci information on the number of vertices and primitives processed by the GL 2175bd8deadSopenharmony_ci and written to one or more buffer objects. Occlusion queries (section 2185bd8deadSopenharmony_ci 4.1.7.1) count the number of fragments or samples that pass the depth 2195bd8deadSopenharmony_ci test. 2205bd8deadSopenharmony_ci 2215bd8deadSopenharmony_ci The results of asynchronous queries are not returned by the GL immediately 2225bd8deadSopenharmony_ci after the completion of the last command in the set; subsequent commands 2235bd8deadSopenharmony_ci can be processed while the query results are not complete. When 2245bd8deadSopenharmony_ci available, the query results are stored in an associated query object. 2255bd8deadSopenharmony_ci The commands described in section 6.1.12 provide mechanisms to determine 2265bd8deadSopenharmony_ci when query results are available and return the actual results of the 2275bd8deadSopenharmony_ci query. The name space for query objects is the unsigned integers, with 2285bd8deadSopenharmony_ci zero reserved by the GL. 2295bd8deadSopenharmony_ci 2305bd8deadSopenharmony_ci Each type of query supported by the GL has an active query object name. If 2315bd8deadSopenharmony_ci the active query object name for a query type is non-zero, the GL is 2325bd8deadSopenharmony_ci currently tracking the information corresponding to that query type and 2335bd8deadSopenharmony_ci the query results will be written into the corresponding query object. If 2345bd8deadSopenharmony_ci the active query object for a query type name is zero, no such information 2355bd8deadSopenharmony_ci is being tracked. 2365bd8deadSopenharmony_ci 2375bd8deadSopenharmony_ci A query object is created by calling 2385bd8deadSopenharmony_ci 2395bd8deadSopenharmony_ci void BeginQuery(enum target, uint id); 2405bd8deadSopenharmony_ci 2415bd8deadSopenharmony_ci with an unused name <id>. <target> indicates the type of query to be 2425bd8deadSopenharmony_ci performed; valid values of <target> are defined in subsequent 2435bd8deadSopenharmony_ci sections. When a query object is created, the name <id> is marked as used 2445bd8deadSopenharmony_ci and associated with a new query object. 2455bd8deadSopenharmony_ci 2465bd8deadSopenharmony_ci BeginQuery sets the active query object name for the query type given by 2475bd8deadSopenharmony_ci <target> to <id>. If BeginQuery is called with an <id> of zero, if the 2485bd8deadSopenharmony_ci active query object name for <target> is non-zero, or if <id> is the 2495bd8deadSopenharmony_ci active query object name for any query type, the error INVALID OPERATION 2505bd8deadSopenharmony_ci is generated. 2515bd8deadSopenharmony_ci 2525bd8deadSopenharmony_ci The command 2535bd8deadSopenharmony_ci 2545bd8deadSopenharmony_ci void EndQuery(enum target); 2555bd8deadSopenharmony_ci 2565bd8deadSopenharmony_ci marks the end of the sequence of commands to be tracked for the query type 2575bd8deadSopenharmony_ci given by <target>. The active query object for <target> is updated to 2585bd8deadSopenharmony_ci indicate that query results are not available, and the active query object 2595bd8deadSopenharmony_ci name for <target> is reset to zero. When the commands issued prior to 2605bd8deadSopenharmony_ci EndQuery have completed and a final query result is available, the query 2615bd8deadSopenharmony_ci object, active when EndQuery is, called is updated by the GL. The query 2625bd8deadSopenharmony_ci object is updated to indicate that the query results are available and to 2635bd8deadSopenharmony_ci contain the query result. If the active query object name for <target> is 2645bd8deadSopenharmony_ci zero when EndQuery is called, the error INVALID_OPERATION is generated. 2655bd8deadSopenharmony_ci 2665bd8deadSopenharmony_ci The command 2675bd8deadSopenharmony_ci 2685bd8deadSopenharmony_ci void GenQueries(sizei n, uint *ids); 2695bd8deadSopenharmony_ci 2705bd8deadSopenharmony_ci returns <n> previously unused query object names in <ids>. These names are 2715bd8deadSopenharmony_ci marked as used, but no object is associated with them until the first time 2725bd8deadSopenharmony_ci they are used by BeginQuery. 2735bd8deadSopenharmony_ci 2745bd8deadSopenharmony_ci Query objects are deleted by calling 2755bd8deadSopenharmony_ci 2765bd8deadSopenharmony_ci void DeleteQueries(sizei n, const uint *ids); 2775bd8deadSopenharmony_ci 2785bd8deadSopenharmony_ci <ids> contains <n> names of query objects to be deleted. After a query 2795bd8deadSopenharmony_ci object is deleted, its name is again unused. Unused names in <ids> are 2805bd8deadSopenharmony_ci silently ignored. 2815bd8deadSopenharmony_ci 2825bd8deadSopenharmony_ci Calling either GenQueries or DeleteQueries while any query of any target 2835bd8deadSopenharmony_ci is active causes an INVALID_OPERATION error to be generated. 2845bd8deadSopenharmony_ci 2855bd8deadSopenharmony_ci Query objects contain two pieces of state: a single bit indicating 2865bd8deadSopenharmony_ci whether a query result is available, and an integer containing the query 2875bd8deadSopenharmony_ci result value. The number of bits used to represent the query result is 2885bd8deadSopenharmony_ci implementation-dependent. In the initial state of a query object, the 2895bd8deadSopenharmony_ci result is available and its value is zero. 2905bd8deadSopenharmony_ci 2915bd8deadSopenharmony_ci The necessary state for each query type is an unsigned integer holding the 2925bd8deadSopenharmony_ci active query object name (zero if no query object is active), and any 2935bd8deadSopenharmony_ci state necessary to keep the current results of an asynchronous query in 2945bd8deadSopenharmony_ci progress. 2955bd8deadSopenharmony_ci 2965bd8deadSopenharmony_ci Section 2.Y, Transform Feedback 2975bd8deadSopenharmony_ci 2985bd8deadSopenharmony_ci In 'transform feedback' mode the vertices of transformed primitives are 2995bd8deadSopenharmony_ci written out to one or more buffer objects. The vertices are fed back after 3005bd8deadSopenharmony_ci the geometry shader stage, if it exists, or otherwise after vertex 3015bd8deadSopenharmony_ci processing right before clipping (section 2.12) but after color 3025bd8deadSopenharmony_ci clamping. Optionally the transformed vertices can be discarded after being 3035bd8deadSopenharmony_ci stored into one or more buffer objects, or they can be passed on down to 3045bd8deadSopenharmony_ci the clipping stage for further processing. 3055bd8deadSopenharmony_ci 3065bd8deadSopenharmony_ci Transform feedback is started and finished by calling 3075bd8deadSopenharmony_ci 3085bd8deadSopenharmony_ci void BeginTransformFeedbackNV(enum primitiveMode) 3095bd8deadSopenharmony_ci 3105bd8deadSopenharmony_ci and 3115bd8deadSopenharmony_ci 3125bd8deadSopenharmony_ci void EndTransformFeedbackNV(), 3135bd8deadSopenharmony_ci 3145bd8deadSopenharmony_ci respectively. Transform feedback is said to be active after a call to 3155bd8deadSopenharmony_ci BeginTransformFeedbackNV and inactive after a call to 3165bd8deadSopenharmony_ci EndTransformFeedbackNV. Transform feedback is initially inactive. 3175bd8deadSopenharmony_ci Transform feedback is performed after color clamping, but immediately 3185bd8deadSopenharmony_ci before clipping in the OpenGL pipeline. <primitiveMode> is one of 3195bd8deadSopenharmony_ci TRIANGLES, LINES, or POINTS, and specifies the output type of primitives 3205bd8deadSopenharmony_ci that will be recorded into the buffer objects bound for transform feedback 3215bd8deadSopenharmony_ci (see below). <primitiveMode> places a restriction on the primitive types 3225bd8deadSopenharmony_ci that may be rendered during an instance of transform feedback. See table 3235bd8deadSopenharmony_ci X.1. 3245bd8deadSopenharmony_ci 3255bd8deadSopenharmony_ci Transform Feedback 3265bd8deadSopenharmony_ci primitiveMode allowed render primitive modes 3275bd8deadSopenharmony_ci ---------------------- --------------------------------- 3285bd8deadSopenharmony_ci POINTS POINTS 3295bd8deadSopenharmony_ci LINES LINES, LINE_LOOP, and LINE_STRIP 3305bd8deadSopenharmony_ci TRIANGLES TRIANGLES, TRIANGLE_STRIP, 3315bd8deadSopenharmony_ci TRIANGLE_FAN, QUADS, QUAD_STRIP, 3325bd8deadSopenharmony_ci and POLYGON 3335bd8deadSopenharmony_ci 3345bd8deadSopenharmony_ci Table X.1 Legal combinations between the transform feedback primitive 3355bd8deadSopenharmony_ci mode, as passed to BeginTransformFeedbackNV and the current primitive 3365bd8deadSopenharmony_ci mode. 3375bd8deadSopenharmony_ci 3385bd8deadSopenharmony_ci If a geometry program or geometry shader is active, the output primitive 3395bd8deadSopenharmony_ci type of the currently active program is used as the render primitive in 3405bd8deadSopenharmony_ci table X.1, otherwise the Begin mode is used. 3415bd8deadSopenharmony_ci 3425bd8deadSopenharmony_ci Quads and polygons will be tessellated and recorded as triangles (the 3435bd8deadSopenharmony_ci order of tessellation within a primitive is undefined); primitives 3445bd8deadSopenharmony_ci specified in strips or fans will be assembled and recorded as individual 3455bd8deadSopenharmony_ci primitives. Incomplete primitives are not recorded. Begin or any operation 3465bd8deadSopenharmony_ci that implicitly calls Begin (such as DrawElements) will generate 3475bd8deadSopenharmony_ci INVALID_OPERATION if the begin mode is not an allowed begin mode for the 3485bd8deadSopenharmony_ci current transform feedback buffer state. If a geometry program or geometry 3495bd8deadSopenharmony_ci shader is active, its output primitive mode is used for the error check 3505bd8deadSopenharmony_ci instead of the begin mode. 3515bd8deadSopenharmony_ci 3525bd8deadSopenharmony_ci It is an invalid operation error to call BeginTransformFeedbackNV, 3535bd8deadSopenharmony_ci TransformFeedbackVaryingsNV, TransformFeedbackAttribsNV, or UseProgram or 3545bd8deadSopenharmony_ci LinkProgram on the currently active program object while transform 3555bd8deadSopenharmony_ci feedback is active. It is an invalid operation error to call 3565bd8deadSopenharmony_ci EndTransformFeedbackNV while transform feedback is inactive. 3575bd8deadSopenharmony_ci 3585bd8deadSopenharmony_ci Transform feedback can operate in either INTERLEAVED_ATTRIBS_NV or 3595bd8deadSopenharmony_ci SEPARATE_ATTRIBS_NV mode. In the INTERLEAVED_ATTRIBS_NV mode, several 3605bd8deadSopenharmony_ci vertex attributes can be written, interleaved, into a single buffer 3615bd8deadSopenharmony_ci object. In the SEPARATE_ATTRIBS_NV mode, vertex attributes are recorded, 3625bd8deadSopenharmony_ci non-interleaved, into several buffer objects simultaneously. 3635bd8deadSopenharmony_ci 3645bd8deadSopenharmony_ci It is an INVALID_OPERATION error to call BeginTransformFeedbackNV if there 3655bd8deadSopenharmony_ci is no buffer object bound to index 0 (see the description of the 3665bd8deadSopenharmony_ci BindBuffer* commands below) in INTERLEAVED_ATTRIBS_NV mode. It is also an 3675bd8deadSopenharmony_ci INVALID_OPERATION error to call BeginTransformFeedbackNV if the number of 3685bd8deadSopenharmony_ci buffer objects bound in SEPARATE_ATTRIBS_NV mode is less than the number 3695bd8deadSopenharmony_ci of buffer objects required, as given by the current transform feedback 3705bd8deadSopenharmony_ci state. It is also an INVALID_OPERATION error to call 3715bd8deadSopenharmony_ci BeginTransformFeedbackNV if no attributes are specified to be captured in 3725bd8deadSopenharmony_ci either separate or interleaved mode. 3735bd8deadSopenharmony_ci 3745bd8deadSopenharmony_ci Buffer objects are made to be targets of transform feedback by calling one 3755bd8deadSopenharmony_ci of 3765bd8deadSopenharmony_ci 3775bd8deadSopenharmony_ci void BindBufferRangeNV(enum target, uint index, uint buffer, 3785bd8deadSopenharmony_ci intptr offset, sizeiptr size) 3795bd8deadSopenharmony_ci void BindBufferOffsetNV(enum target, uint index, uint buffer, 3805bd8deadSopenharmony_ci intptr offset) 3815bd8deadSopenharmony_ci void BindBufferBaseNV(enum target, uint index, uint buffer) 3825bd8deadSopenharmony_ci 3835bd8deadSopenharmony_ci where <target> is set to TRANSFORM_FEEDBACK_BUFFER_NV. Any of the three 3845bd8deadSopenharmony_ci BindBuffer* commands perform the equivalent of BindBuffer(target, 3855bd8deadSopenharmony_ci buffer). <buffer> specifies which buffer object to bind to the target at 3865bd8deadSopenharmony_ci index number <index>. <index> exists for use with the SEPARATE_ATTRIBS_NV 3875bd8deadSopenharmony_ci mode and must be less than the value of 3885bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV. <offset> specifies a starting 3895bd8deadSopenharmony_ci offset into the buffer object <buffer>. <size> specifies the number of 3905bd8deadSopenharmony_ci elements that can be written during transform feedback mode. This is 3915bd8deadSopenharmony_ci useful to prevent the GL from writing past a certain position in the 3925bd8deadSopenharmony_ci buffer object. Both <offset> and <size> are in basic machine units. The 3935bd8deadSopenharmony_ci error INVALID_VALUE is generated if the value of <size> is less than or 3945bd8deadSopenharmony_ci equal to zero. The error INVALID_VALUE is generated if <offset> or <size> 3955bd8deadSopenharmony_ci are not word-aligned. The error INVALID_OPERATION is generated when any of 3965bd8deadSopenharmony_ci the BindBuffer* commands is called while transform feedback is active. 3975bd8deadSopenharmony_ci 3985bd8deadSopenharmony_ci BindBufferBaseNV is equivalent to calling BindBufferOffsetNV with an 3995bd8deadSopenharmony_ci <offset> of 0. BindBufferOffsetNV is the equivalent of calling 4005bd8deadSopenharmony_ci BindBufferRangeNV with <size> = sizeof(buffer) - <offset> and rounding 4015bd8deadSopenharmony_ci <size> down so that it is word-aligned. 4025bd8deadSopenharmony_ci 4035bd8deadSopenharmony_ci If recording the vertices of a primitive to the buffer objects being used 4045bd8deadSopenharmony_ci for transform feedback purposes would result in either exceeding the 4055bd8deadSopenharmony_ci limits of any buffer object's size, or in exceeding the end position 4065bd8deadSopenharmony_ci <offset> + <size> - 1, as set by BindBufferRangeNV, then no vertices of 4075bd8deadSopenharmony_ci the primitive are recorded, and the counter corresponding to the 4085bd8deadSopenharmony_ci asynchronous query target TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV (see 4095bd8deadSopenharmony_ci Section 2.Z) is not incremented. 4105bd8deadSopenharmony_ci 4115bd8deadSopenharmony_ci Two methods exist to specify which transformed vertex attributes are 4125bd8deadSopenharmony_ci streamed to one, or more, buffer objects in transform feedback mode. If 4135bd8deadSopenharmony_ci an OpenGL Shading Language vertex and/or geometry shader is active, then 4145bd8deadSopenharmony_ci the state set with the TransformFeedbackVaryingsNV() command determines 4155bd8deadSopenharmony_ci which attributes to record. If neither a vertex nor geometry shader is 4165bd8deadSopenharmony_ci active, the state set with the TransformFeedbackAttribsNV() command 4175bd8deadSopenharmony_ci determines which attributes to record. 4185bd8deadSopenharmony_ci 4195bd8deadSopenharmony_ci When a program object containing a vertex shader and/or geometry shader is 4205bd8deadSopenharmony_ci active, the set of vertex attributes recorded in transform feedback mode 4215bd8deadSopenharmony_ci is specified by 4225bd8deadSopenharmony_ci 4235bd8deadSopenharmony_ci void TransformFeedbackVaryingsNV(uint program, sizei count, 4245bd8deadSopenharmony_ci const int *locations, 4255bd8deadSopenharmony_ci enum bufferMode) 4265bd8deadSopenharmony_ci 4275bd8deadSopenharmony_ci This command sets the transform feedback state for <program> and specifies 4285bd8deadSopenharmony_ci which varying variables to record when transform feedback is active. The 4295bd8deadSopenharmony_ci array <locations> contains <count> locations of active varying variables, 4305bd8deadSopenharmony_ci as queried with GetActiveVaryingNV(), to stream to a buffer object. See 4315bd8deadSopenharmony_ci section 2.15.3. <bufferMode> is one of INTERLEAVED_ATTRIBS_NV or 4325bd8deadSopenharmony_ci SEPARATE_ATTRIBS_NV. The error INVALID_OPERATION is generated if any 4335bd8deadSopenharmony_ci value in <locations> does not reference an active varying variable, or if 4345bd8deadSopenharmony_ci any value in <locations> appears more than once in the array. The same 4355bd8deadSopenharmony_ci error is generated if <program> has not been linked successfully. The 4365bd8deadSopenharmony_ci program object's state value TRANSFORM_FEEDBACK_BUFFER_MODE_NV will be set 4375bd8deadSopenharmony_ci to <bufferMode> and the program object's state value 4385bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_VARYINGS_NV set to <count>. These values can be queried 4395bd8deadSopenharmony_ci with GetProgramiv (see section 6.1.14). 4405bd8deadSopenharmony_ci 4415bd8deadSopenharmony_ci In the INTERLEAVED_ATTRIBS_NV mode, varying variables are written, 4425bd8deadSopenharmony_ci interleaved, into one buffer object. This is the buffer object bound to 4435bd8deadSopenharmony_ci index 0. Varying variables are written out to that buffer object in the 4445bd8deadSopenharmony_ci order that they appear in the array <locations>. The error 4455bd8deadSopenharmony_ci INVALID_OPERATION is generated if the total number of components of all 4465bd8deadSopenharmony_ci varying variables specified in the array <locations> is greater than 4475bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV. 4485bd8deadSopenharmony_ci 4495bd8deadSopenharmony_ci In the SEPARATE_ATTRIBS_NV mode, varying variables are recorded, 4505bd8deadSopenharmony_ci non-interleaved, into several buffer objects simultaneously. The first 4515bd8deadSopenharmony_ci varying variable in the array <locations> is written to the buffer bound 4525bd8deadSopenharmony_ci to index 0. The last varying variable is written to the buffer object 4535bd8deadSopenharmony_ci bound to index <count> - 1. No more than 4545bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV buffer objects can be written 4555bd8deadSopenharmony_ci to simultaneously. The error INVALID_VALUE is generated if <count> is 4565bd8deadSopenharmony_ci greater than that limit. Furthermore, the number of components for each 4575bd8deadSopenharmony_ci varying variable in the array <locations> cannot exceed 4585bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV. The error INVALID_VALUE is 4595bd8deadSopenharmony_ci generated if any varying variable in <locations> exceeds this limit. 4605bd8deadSopenharmony_ci 4615bd8deadSopenharmony_ci It is not necessary to (re-)link <program> after calling 4625bd8deadSopenharmony_ci TransformFeedbackVaryingsNV(). Changes to the transform feedback state 4635bd8deadSopenharmony_ci will be picked up right away after calling TransformFeedbackVaryingsNV(). 4645bd8deadSopenharmony_ci 4655bd8deadSopenharmony_ci The value for any attribute specified to be streamed to a buffer object 4665bd8deadSopenharmony_ci but not actually written by a vertex or geometry shader is undefined. 4675bd8deadSopenharmony_ci 4685bd8deadSopenharmony_ci When neither a vertex nor geometry shader is active, the vertex attributes 4695bd8deadSopenharmony_ci produced by fixed-function vertex processing or an assembly vertex or 4705bd8deadSopenharmony_ci geometry program can be recorded in transform feedback mode. The set of 4715bd8deadSopenharmony_ci attributes to record is specified by 4725bd8deadSopenharmony_ci 4735bd8deadSopenharmony_ci void TransformFeedbackAttribsNV(sizei count, const int *attribs, 4745bd8deadSopenharmony_ci enum bufferMode) 4755bd8deadSopenharmony_ci 4765bd8deadSopenharmony_ci This command specifies which attributes to record into one, or more, 4775bd8deadSopenharmony_ci buffer objects. The value TRANSFORM_FEEDBACK_BUFFER_MODE_NV will be set 4785bd8deadSopenharmony_ci to <bufferMode> and the value TRANSFORM_FEEDBACK_ATTRIBS_NV set to 4795bd8deadSopenharmony_ci <count>. The array <attribs> contains an interleaved representation of 4805bd8deadSopenharmony_ci the attributes desired to be fed back containing 3*count values. For 4815bd8deadSopenharmony_ci attrib i, the value at 3*i+0 is the enum corresponding to the attrib, as 4825bd8deadSopenharmony_ci given in table X.2. The value at 3*i+1 is the number of components of the 4835bd8deadSopenharmony_ci provided attrib to be fed back and is between 1 and 4. The value at 3*i+2 4845bd8deadSopenharmony_ci is the index for attribute enumerants corresponding to more than one real 4855bd8deadSopenharmony_ci attribute. For an attribute enumerant corresponding to only one attribute, 4865bd8deadSopenharmony_ci the index is ignored. For an attribute enumerant corresponding to more 4875bd8deadSopenharmony_ci than one attribute, the error INVALID_VALUE is generated if the index 4885bd8deadSopenharmony_ci value is outside the allowable range for that attribute. 4895bd8deadSopenharmony_ci 4905bd8deadSopenharmony_ci permitted GPU_program_4 4915bd8deadSopenharmony_ci attrib sizes index? result name 4925bd8deadSopenharmony_ci --------------------- -------- -------- -------------- 4935bd8deadSopenharmony_ci POSITION 1,2,3,4 no position 4945bd8deadSopenharmony_ci PRIMARY_COLOR 1,2,3,4 no color.front.primary 4955bd8deadSopenharmony_ci SECONDARY_COLOR_NV 1,2,3,4 no color.front.secondary 4965bd8deadSopenharmony_ci BACK_PRIMARY_COLOR_NV 1,2,3,4 no color.back.primary 4975bd8deadSopenharmony_ci BACK_SECONDARY_COLOR_NV 1,2,3,4 no color.back.secondary 4985bd8deadSopenharmony_ci FOG_COORDINATE 1 no fogcoord 4995bd8deadSopenharmony_ci POINT_SIZE 1 no pointsize 5005bd8deadSopenharmony_ci TEXTURE_COORD_NV 1,2,3,4 yes texcoord[index] 5015bd8deadSopenharmony_ci CLIP_DISTANCE_NV 1 yes clip[index] 5025bd8deadSopenharmony_ci VERTEX_ID_NV 1 no vertexid 5035bd8deadSopenharmony_ci PRIMITIVE_ID_NV 1 no primid 5045bd8deadSopenharmony_ci GENERIC_ATTRIB_NV 1,2,3,4 yes attrib[index] 5055bd8deadSopenharmony_ci LAYER_NV 1 no layer 5065bd8deadSopenharmony_ci 5075bd8deadSopenharmony_ci Table X.2: Transform Feedback Attribute Specifiers.The 'attrib' column 5085bd8deadSopenharmony_ci specifies which attribute to record. The 'permitted sizes' column 5095bd8deadSopenharmony_ci indicates how many components of the attribute can be recorded. The 5105bd8deadSopenharmony_ci 'index' column indicates if the attribute is indexed. The 'gpu program 4' 5115bd8deadSopenharmony_ci column shows which result variable of a vertex or geometry program 5125bd8deadSopenharmony_ci corresponds to the attribute to record. 5135bd8deadSopenharmony_ci 5145bd8deadSopenharmony_ci The TransformFeedbackAttribsNV() command sets transform feedback state 5155bd8deadSopenharmony_ci which is used both when the GL is in fixed-function vertex processing 5165bd8deadSopenharmony_ci mode, as well as when an assembly vertex and/or geometry program is 5175bd8deadSopenharmony_ci active. 5185bd8deadSopenharmony_ci 5195bd8deadSopenharmony_ci The parameter <bufferMode> has the same meaning as described for 5205bd8deadSopenharmony_ci TransformFeedbackVaryingsNV(). Attributes are either written interleaved, 5215bd8deadSopenharmony_ci or into separate buffer objects, in the same manner as described earlier 5225bd8deadSopenharmony_ci for TransformFeedbackVaryingsNV(). 5235bd8deadSopenharmony_ci 5245bd8deadSopenharmony_ci In the INTERLEAVED_ATTRIBS_NV mode, the error INVALID_VALUE is generated 5255bd8deadSopenharmony_ci if the sum of the values of elements 3*i+1 in the array <attribs> is 5265bd8deadSopenharmony_ci greater than MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV. 5275bd8deadSopenharmony_ci 5285bd8deadSopenharmony_ci In the SEPARATE_ATTRIBS_NV mode, no more than 5295bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV buffer objects can be written 5305bd8deadSopenharmony_ci to simultaneously. The error INVALID_VALUE is generated if <count> is 5315bd8deadSopenharmony_ci greater than that limit. 5325bd8deadSopenharmony_ci 5335bd8deadSopenharmony_ci The error INVALID_OPERATION is generated if any attribute appears more 5345bd8deadSopenharmony_ci than once in the array <attribs>. 5355bd8deadSopenharmony_ci 5365bd8deadSopenharmony_ci The value for any attribute specified to be streamed to a buffer object 5375bd8deadSopenharmony_ci but not actually written by a vertex or geometry program is undefined. 5385bd8deadSopenharmony_ci The values of PRIMITIVE_ID_NV or LAYER_NV for a vertex is defined if and 5395bd8deadSopenharmony_ci only if a geometry program is active and that program writes to the result 5405bd8deadSopenharmony_ci variables "result.primid" or "result.layer", respectively. The value of 5415bd8deadSopenharmony_ci VERTEX_ID_NV is only defined if and only if a vertex program is active, no 5425bd8deadSopenharmony_ci geometry program is active, and the vertex program writes to the output 5435bd8deadSopenharmony_ci attribute "result.id". 5445bd8deadSopenharmony_ci 5455bd8deadSopenharmony_ci Section 2.Z, Primitive Queries 5465bd8deadSopenharmony_ci 5475bd8deadSopenharmony_ci Primitive queries use query objects to track the number of primitives 5485bd8deadSopenharmony_ci generated by the GL and to track the number of primitives written to 5495bd8deadSopenharmony_ci transform feedback buffers. 5505bd8deadSopenharmony_ci 5515bd8deadSopenharmony_ci When BeginQuery is called with a <target> of PRIMITIVES_GENERATED_NV, the 5525bd8deadSopenharmony_ci primitives-generated count maintained by the GL is set to zero. When the 5535bd8deadSopenharmony_ci generated primitive query is active, the primitives-generated count is 5545bd8deadSopenharmony_ci incremented every time a primitive reaches the Discarding Rasterization 5555bd8deadSopenharmony_ci stage (see Section 3.x) right before rasterization. This counter counts 5565bd8deadSopenharmony_ci the number of primitives emitted by a geometry shader, if active, possibly 5575bd8deadSopenharmony_ci further tessellated into separate primitives during the transform-feedback 5585bd8deadSopenharmony_ci stage, if active. 5595bd8deadSopenharmony_ci 5605bd8deadSopenharmony_ci When BeginQuery is called with a <target> of 5615bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV, the transform-feedback- 5625bd8deadSopenharmony_ci primitives-written count maintained by the GL is set to zero. When the 5635bd8deadSopenharmony_ci transform feedback primitive written query is active, the 5645bd8deadSopenharmony_ci transform-feedback-primitives-written count is incremented every time a 5655bd8deadSopenharmony_ci primitive is recorded into a buffer object. If transform feedback is not 5665bd8deadSopenharmony_ci active, this counter is not incremented. If the primitive does not fit in 5675bd8deadSopenharmony_ci the buffer object, the counter is not incremented. 5685bd8deadSopenharmony_ci 5695bd8deadSopenharmony_ci These two queries can be used together to determine if all primitives have 5705bd8deadSopenharmony_ci been written to the bound feedback buffers; if both queries are run 5715bd8deadSopenharmony_ci simultaneously and the query results are equal, all primitives have been 5725bd8deadSopenharmony_ci written to the buffer(s). If the number of primitives written is less than 5735bd8deadSopenharmony_ci the number of primitives generated, the buffer is full. 5745bd8deadSopenharmony_ci 5755bd8deadSopenharmony_ci Modify section 2.15.3 "Shader Variables", page 75. 5765bd8deadSopenharmony_ci 5775bd8deadSopenharmony_ci Change the second sentence in the first paragraph on p. 84 as follows: 5785bd8deadSopenharmony_ci 5795bd8deadSopenharmony_ci . . . or read by a fragment shader, will count against this limit. The 5805bd8deadSopenharmony_ci transformed vertex position (gl_Position) does not count against this 5815bd8deadSopenharmony_ci limit. 5825bd8deadSopenharmony_ci 5835bd8deadSopenharmony_ci Add the following paragraphs on p.84: 5845bd8deadSopenharmony_ci 5855bd8deadSopenharmony_ci A varying variable is considered active if it is determined by the linker 5865bd8deadSopenharmony_ci that the varying will actually be used when the executable code in a 5875bd8deadSopenharmony_ci program object is executed. The linker will make this determination 5885bd8deadSopenharmony_ci regardless of the transform-feedback state set with the 5895bd8deadSopenharmony_ci TransformFeedbackVaryingsNV() command. In cases where the linker cannot 5905bd8deadSopenharmony_ci make a conclusive determination, the varying will be considered active. It 5915bd8deadSopenharmony_ci is possible to override this determination and force the linker to 5925bd8deadSopenharmony_ci consider a varying variable as active by calling ActiveVaryingNV(). This 5935bd8deadSopenharmony_ci can be useful in transform feedback mode if there are varying variables to 5945bd8deadSopenharmony_ci be recorded but not otherwise needed. 5955bd8deadSopenharmony_ci 5965bd8deadSopenharmony_ci To find the location of an active varying variable, call 5975bd8deadSopenharmony_ci 5985bd8deadSopenharmony_ci int GetVaryingLocationNV(uint program, const char *name) 5995bd8deadSopenharmony_ci 6005bd8deadSopenharmony_ci This command will return the location of varying variable <name>. <name> 6015bd8deadSopenharmony_ci is a null-terminated string without whitespace. If <name> is not the name 6025bd8deadSopenharmony_ci of an active varying variable in <program>, -1 is returned. Locations for 6035bd8deadSopenharmony_ci both user-defined as well as built-in varying variables can be queried. If 6045bd8deadSopenharmony_ci <program> has not been successfully linked, the error INVALID_OPERATION is 6055bd8deadSopenharmony_ci generated. After a program is linked, the location will not change, unless 6065bd8deadSopenharmony_ci the program is re- linked. A valid name cannot be any portion of a single 6075bd8deadSopenharmony_ci vector or matrix, but can be a single element of an array or the whole 6085bd8deadSopenharmony_ci array. Note that varying variables cannot be structures. 6095bd8deadSopenharmony_ci 6105bd8deadSopenharmony_ci To determine the set of active varying variables used by a program object, 6115bd8deadSopenharmony_ci and their data types, use the command: 6125bd8deadSopenharmony_ci 6135bd8deadSopenharmony_ci void GetActiveVaryingNV(uint program, uint index, 6145bd8deadSopenharmony_ci sizei bufSize, sizei *length, sizei *size, 6155bd8deadSopenharmony_ci enum *type, char *name); 6165bd8deadSopenharmony_ci 6175bd8deadSopenharmony_ci This command provides information about the varying selected by 6185bd8deadSopenharmony_ci <index>. An <index> of 0 selects the first active varying variable, and an 6195bd8deadSopenharmony_ci <index> of ACTIVE_VARYINGS_NV-1 selects the last active varying 6205bd8deadSopenharmony_ci variable. The value of ACTIVE_VARYINGS_NV can be queried with 6215bd8deadSopenharmony_ci GetProgramiv (see section 6.1.14). If <index> is greater than or equal to 6225bd8deadSopenharmony_ci ACTIVE_VARYINGS_NV, the error INVALID_VALUE is generated. The parameter 6235bd8deadSopenharmony_ci <program> is the name of a program object for which the command 6245bd8deadSopenharmony_ci LinkProgram has been issued in the past. It is not necessary for <program> 6255bd8deadSopenharmony_ci to have been linked successfully. The link could have failed because the 6265bd8deadSopenharmony_ci number of active varying variables exceeded the limit. 6275bd8deadSopenharmony_ci 6285bd8deadSopenharmony_ci The name of the selected varying is returned as a null-terminated string 6295bd8deadSopenharmony_ci in <name>. The actual number of characters written into <name>, excluding 6305bd8deadSopenharmony_ci the null terminator, is returned in <length>. If <length> is NULL, no 6315bd8deadSopenharmony_ci length is returned. The maximum number of characters that may be written 6325bd8deadSopenharmony_ci into <name>, including the null terminator, is specified by <bufSize>. The 6335bd8deadSopenharmony_ci returned varying name can be the name of a user defined varying variable 6345bd8deadSopenharmony_ci or the name of a built- in varying (which begin with the prefix "gl_", see 6355bd8deadSopenharmony_ci the OpenGL Shading Language specification for a complete list). The length 6365bd8deadSopenharmony_ci of the longest varying name in program is given by 6375bd8deadSopenharmony_ci ACTIVE_VARYING_MAX_LENGTH_NV, which can be queried with GetProgramiv (see 6385bd8deadSopenharmony_ci section 6.1.14). 6395bd8deadSopenharmony_ci 6405bd8deadSopenharmony_ci For the selected varying variable, its type is returned into <type>. The 6415bd8deadSopenharmony_ci size of the varying is returned into <size>. The value in <size> is in 6425bd8deadSopenharmony_ci units of the type returned in <type>. The type returned can be any of 6435bd8deadSopenharmony_ci FLOAT, FLOAT_VEC2, FLOAT_VEC3, FLOAT_VEC4, INT, INT_VEC2, INT_VEC3, 6445bd8deadSopenharmony_ci INT_VEC4, UNSIGNED_INT, UNSIGNED_INT_VEC2_EXT, UNSIGNED_INT_VEC3_EXT, 6455bd8deadSopenharmony_ci UNSIGNED_INT_VEC4_EXT, FLOAT_MAT2, FLOAT_MAT3, or FLOAT_MAT4. If an error 6465bd8deadSopenharmony_ci occurred, the return parameters <length>, <size>, <type> and <name> will 6475bd8deadSopenharmony_ci be unmodified. This command will return as much information about active 6485bd8deadSopenharmony_ci varying variables as possible. If no information is available, <length> 6495bd8deadSopenharmony_ci will be set to zero and <name> will be an empty string. This situation 6505bd8deadSopenharmony_ci could arise if GetActiveVaryingNV is issued after a failed link. 6515bd8deadSopenharmony_ci 6525bd8deadSopenharmony_ci To force the linker to mark a varying variable as active, call 6535bd8deadSopenharmony_ci 6545bd8deadSopenharmony_ci void ActiveVaryingNV(uint program, const char *name) 6555bd8deadSopenharmony_ci 6565bd8deadSopenharmony_ci to specify that the varying variable <name> in <program> should be marked 6575bd8deadSopenharmony_ci as active when the program is next linked. In particular, it does not 6585bd8deadSopenharmony_ci modify the list of active varying variables in a program object that has 6595bd8deadSopenharmony_ci already been linked. For any varying variable in <program> not passed to 6605bd8deadSopenharmony_ci ActiveVaryingNV, the linker will determine their active status. <name> 6615bd8deadSopenharmony_ci must be a null-terminated string without whitespace. A valid name cannot 6625bd8deadSopenharmony_ci be an element of an array, or any portion of a single vector or 6635bd8deadSopenharmony_ci matrix. ActiveVaryingNV may be issued before any shader objects are 6645bd8deadSopenharmony_ci attached to <program>. Hence, <name> can contain any string, including a 6655bd8deadSopenharmony_ci name that is never used as a varying variable in any shader object. Such 6665bd8deadSopenharmony_ci names are ignored by the GL. 6675bd8deadSopenharmony_ci 6685bd8deadSopenharmony_ci The application is advised to force any varying variable live that it 6695bd8deadSopenharmony_ci needs for transform feedback purposes. The set of active varying variables 6705bd8deadSopenharmony_ci are linker dependent. 6715bd8deadSopenharmony_ci 6725bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 2.0 Specification (Rasterization) 6735bd8deadSopenharmony_ci 6745bd8deadSopenharmony_ci (Add new section 3.X, Discarding Rasterization) 6755bd8deadSopenharmony_ci 6765bd8deadSopenharmony_ci Primitives can be optionally discarded before rasterization by calling 6775bd8deadSopenharmony_ci Enable and Disable with RASTERIZER_DISCARD_NV. When enabled, primitives 6785bd8deadSopenharmony_ci are discarded right before the rasterization stage, but after the optional 6795bd8deadSopenharmony_ci transform feedback stage. When disabled, primitives are passed through to 6805bd8deadSopenharmony_ci the rasterization stage to be processed normally. RASTERIZER_DISCARD_NV 6815bd8deadSopenharmony_ci applies to the DrawPixels, CopyPixels, Bitmap, Clear and Accum commands as 6825bd8deadSopenharmony_ci well. 6835bd8deadSopenharmony_ci 6845bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 2.0 Specification (Per-Fragment 6855bd8deadSopenharmony_ciOperations and the Frame Buffer) 6865bd8deadSopenharmony_ci 6875bd8deadSopenharmony_ci (Replace section 4.1.7, "Occlusion Queries", p. 204, with the following) 6885bd8deadSopenharmony_ci 6895bd8deadSopenharmony_ci Occlusion queries use query objects to track the number of fragments or 6905bd8deadSopenharmony_ci samples that pass the depth test. An occlusion query can be started and 6915bd8deadSopenharmony_ci finished by calling BeginQuery and EndQuery, respectively, with a <target> 6925bd8deadSopenharmony_ci of SAMPLES_PASSED. 6935bd8deadSopenharmony_ci 6945bd8deadSopenharmony_ci When an occlusion query starts, the samples-passed count maintained by the 6955bd8deadSopenharmony_ci GL is set to zero. When an occlusion query is active, the samples-passed 6965bd8deadSopenharmony_ci count is incremented for each fragment that passes the depth test. If the 6975bd8deadSopenharmony_ci value of SAMPLE BUFFERS is 0, then the samples- passed count is 6985bd8deadSopenharmony_ci incremented by 1 for each fragment. If the value of SAMPLE BUFFERS is 1, 6995bd8deadSopenharmony_ci then the samples-passed count is incremented by the number of samples 7005bd8deadSopenharmony_ci whose coverage bit is set. However, implementations, at their discretion, 7015bd8deadSopenharmony_ci may instead increase the samples-passed count by the value of SAMPLES if 7025bd8deadSopenharmony_ci any sample in the fragment is covered. When an occlusion query finishes 7035bd8deadSopenharmony_ci and all fragments generated by the commands issued prior to EndQuery have 7045bd8deadSopenharmony_ci been generated, the samples-passed count is written to the corresponding 7055bd8deadSopenharmony_ci query object as the query result value, and the query result for that 7065bd8deadSopenharmony_ci object is marked as available. 7075bd8deadSopenharmony_ci 7085bd8deadSopenharmony_ci If the samples-passed count overflows, (i.e., exceeds the value 2^n - 1, 7095bd8deadSopenharmony_ci where n is the number of bits in the samples-passed count), its value 7105bd8deadSopenharmony_ci becomes undefined. It is recommended, but not required, that 7115bd8deadSopenharmony_ci implementations handle this overflow case by saturating at 2^n - 1 and 7125bd8deadSopenharmony_ci incrementing no further. 7135bd8deadSopenharmony_ci 7145bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 2.0 Specification (Special Functions) 7155bd8deadSopenharmony_ci 7165bd8deadSopenharmony_ci (Add to section 5.4, Display Lists p. 237) 7175bd8deadSopenharmony_ci 7185bd8deadSopenharmony_ci On p. 241, add the following to the list of vertex buffer object commands 7195bd8deadSopenharmony_ci not compiled into a display list: BindBufferRangeNV, BindBufferOffsetNV, 7205bd8deadSopenharmony_ci BindBufferBaseNV, TransformFeedbackAttribsNV, 7215bd8deadSopenharmony_ci TransformFeedbackVaryingsNV, and ActiveVaryingNV. 7225bd8deadSopenharmony_ci 7235bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 2.0 Specification (State and State 7245bd8deadSopenharmony_ciRequests) 7255bd8deadSopenharmony_ci 7265bd8deadSopenharmony_ci Modify the second paragraph of section 6.1.1 (Simple Queries) p244 to read 7275bd8deadSopenharmony_ci as follows: 7285bd8deadSopenharmony_ci 7295bd8deadSopenharmony_ci ...<data> is a pointer to a scalar or array of the indicated type in which 7305bd8deadSopenharmony_ci to place the returned data. The commands 7315bd8deadSopenharmony_ci 7325bd8deadSopenharmony_ci void GetIntegerIndexedvEXT(enum param, uint index, int *values); 7335bd8deadSopenharmony_ci void GetBooleanIndexedvEXT(enum param, uint index, boolean *values); 7345bd8deadSopenharmony_ci 7355bd8deadSopenharmony_ci are used to query indexed state. <target> is the name of the indexed 7365bd8deadSopenharmony_ci state and <index> is the index of the particular element being queried. 7375bd8deadSopenharmony_ci <data> is a pointer to a scalar or array of the indicated type in which to 7385bd8deadSopenharmony_ci place the returned data. In addition ... 7395bd8deadSopenharmony_ci 7405bd8deadSopenharmony_ci (Replace Section 6.1.12, Occlusion Queries, p. 254) 7415bd8deadSopenharmony_ci 7425bd8deadSopenharmony_ci Section 6.1.12, Asynchronous Queries 7435bd8deadSopenharmony_ci 7445bd8deadSopenharmony_ci The command 7455bd8deadSopenharmony_ci 7465bd8deadSopenharmony_ci boolean IsQuery(uint id); 7475bd8deadSopenharmony_ci 7485bd8deadSopenharmony_ci returns TRUE if <id> is the name of a query object. If <id> is zero, or if 7495bd8deadSopenharmony_ci <id> is a non-zero value that is not the name of a query object, IsQuery 7505bd8deadSopenharmony_ci returns FALSE. 7515bd8deadSopenharmony_ci 7525bd8deadSopenharmony_ci Information about a query target can be queried with the command 7535bd8deadSopenharmony_ci 7545bd8deadSopenharmony_ci void GetQueryiv(enum target, enum pname, int *params); 7555bd8deadSopenharmony_ci 7565bd8deadSopenharmony_ci <target> identifies the query target and can be SAMPLES_PASSED for 7575bd8deadSopenharmony_ci occlusion queries or PRIMITIVES_GENERATED_NV and 7585bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV for primitive queries. 7595bd8deadSopenharmony_ci 7605bd8deadSopenharmony_ci If <pname> is CURRENT_QUERY, the name of the currently active query for 7615bd8deadSopenharmony_ci <target>, or zero if no query is active, will be placed in <params>. 7625bd8deadSopenharmony_ci 7635bd8deadSopenharmony_ci If <pname> is QUERY_COUNTER_BITS, the implementation-dependent number of 7645bd8deadSopenharmony_ci bits used to hold the query result for <target> will be placed in 7655bd8deadSopenharmony_ci params. The number of query counter bits may be zero, in which case the 7665bd8deadSopenharmony_ci counter contains no useful information. 7675bd8deadSopenharmony_ci 7685bd8deadSopenharmony_ci For primitive queries (PRIMITIVES_GENERATED_NV and 7695bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV) if the number of bits is 7705bd8deadSopenharmony_ci non-zero, the minimum number of bits allowed is 32. 7715bd8deadSopenharmony_ci 7725bd8deadSopenharmony_ci For occlusion queries (SAMPLES_PASSED), if the number of bits is non- 7735bd8deadSopenharmony_ci zero, the minimum number of bits allowed is a function of the 7745bd8deadSopenharmony_ci implementation's maximum viewport dimensions (MAX_VIEWPORT_DIMS). The 7755bd8deadSopenharmony_ci counter must be able to represent at least two overdraws for every pixel 7765bd8deadSopenharmony_ci in the viewport. The formula to compute the allowable minimum value (where 7775bd8deadSopenharmony_ci n is the minimum number of bits) is: 7785bd8deadSopenharmony_ci 7795bd8deadSopenharmony_ci n = min(32, ceil(log_2(maxViewportWidth * 7805bd8deadSopenharmony_ci maxViewportHeight * 2))). 7815bd8deadSopenharmony_ci 7825bd8deadSopenharmony_ci The state of a query object can be queried with the commands 7835bd8deadSopenharmony_ci 7845bd8deadSopenharmony_ci void GetQueryObjectiv(uint id, enum pname, int *params); 7855bd8deadSopenharmony_ci void GetQueryObjectuiv(uint id, enum pname, uint *params); 7865bd8deadSopenharmony_ci 7875bd8deadSopenharmony_ci If <id> is not the name of a query object, or if the query object named by 7885bd8deadSopenharmony_ci <id> is currently active, then an INVALID_OPERATION error is generated. 7895bd8deadSopenharmony_ci 7905bd8deadSopenharmony_ci If <pname> is QUERY_RESULT, then the query object's result value is 7915bd8deadSopenharmony_ci returned as a single integer in <params>. If the value is so large in 7925bd8deadSopenharmony_ci magnitude that it cannot be represented with the requested type, then the 7935bd8deadSopenharmony_ci nearest value representable using the requested type is returned. If the 7945bd8deadSopenharmony_ci number of query counter bits for any <target> is zero, then the result is 7955bd8deadSopenharmony_ci returned as a single integer with a value of 0. 7965bd8deadSopenharmony_ci 7975bd8deadSopenharmony_ci There may be an indeterminate delay before the above query returns. If 7985bd8deadSopenharmony_ci <pname> is QUERY_RESULT_AVAILABLE, FALSE is returned if such a delay would 7995bd8deadSopenharmony_ci be required, TRUE is returned otherwise. It must always be true that if 8005bd8deadSopenharmony_ci any query object returns a result available of TRUE, all queries of the 8015bd8deadSopenharmony_ci same type issued prior to that query must also return TRUE. 8025bd8deadSopenharmony_ci 8035bd8deadSopenharmony_ci Querying the state for any given query object forces the corresponding 8045bd8deadSopenharmony_ci query to complete within a finite amount of time. 8055bd8deadSopenharmony_ci 8065bd8deadSopenharmony_ci If multiple queries are issued using the same object name prior to calling 8075bd8deadSopenharmony_ci GetQueryObject[u]iv, the result and availability information returned will 8085bd8deadSopenharmony_ci always be from the last query issued. The results from any queries before 8095bd8deadSopenharmony_ci the last one will be lost if they are not retrieved before starting a new 8105bd8deadSopenharmony_ci query on the same <target> and <id>. 8115bd8deadSopenharmony_ci 8125bd8deadSopenharmony_ci (Add to Section 6.1.13, Buffer Objects, p. 255) 8135bd8deadSopenharmony_ci 8145bd8deadSopenharmony_ci Add the following paragraph to the bottom of this section, p. 256. 8155bd8deadSopenharmony_ci 8165bd8deadSopenharmony_ci To query which buffer objects are the target(s) when transform feedback is 8175bd8deadSopenharmony_ci active, call GetIntegerIndexedvEXT() with <param> set to 8185bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_BUFFER_BINDING_NV. <index> has to be in the range 0 to 8195bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV - 1, otherwise the error 8205bd8deadSopenharmony_ci INVALID_VALUE is generated. The name of the buffer object bound to <index> 8215bd8deadSopenharmony_ci is returned in <values>. If no buffer object is bound for <index>, zero is 8225bd8deadSopenharmony_ci returned in <values>. 8235bd8deadSopenharmony_ci 8245bd8deadSopenharmony_ci To query the starting offset or size of the range of each buffer object 8255bd8deadSopenharmony_ci binding used for transform feedback, call GetIntegerIndexedvEXT() with 8265bd8deadSopenharmony_ci <param> set to TRANSFORM_FEEDBACK_BUFFER_START_NV or 8275bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_BUFFER_SIZE_NV respectively. The error INVALID_VALUE 8285bd8deadSopenharmony_ci is generated if <index> not in the range 0 to 8295bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV - 1. If the parameter 8305bd8deadSopenharmony_ci (starting offset or size) was not specified when the buffer object was 8315bd8deadSopenharmony_ci bound, or if no buffer object is bound to <index>, zero is returned. 8325bd8deadSopenharmony_ci 8335bd8deadSopenharmony_ci (Add a new Section 6.1.14 "Transform Feedback " and rename 6.1.14 to 8345bd8deadSopenharmony_ci 6.1.15) 8355bd8deadSopenharmony_ci 8365bd8deadSopenharmony_ci To query the attributes to stream to a buffer object when neither an 8375bd8deadSopenharmony_ci OpenGL Shading Language vertex nor geometry shader is active, call 8385bd8deadSopenharmony_ci GetIntegerIndexedvEXT() with <param> set to 8395bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_RECORD_NV. This will return three values in <values> 8405bd8deadSopenharmony_ci for each <index>. The first value returned is the attribute. The second 8415bd8deadSopenharmony_ci value the number of components of the attribute, and the third value the 8425bd8deadSopenharmony_ci index of the attribute, if applicable. If the attribute is not indexed, 8435bd8deadSopenharmony_ci the third component will return 0. The parameter <index> has to be in the 8445bd8deadSopenharmony_ci range 0 to TRANSFORM_FEEDBACK_ATTRIBS_NV - 1, otherwise the error 8455bd8deadSopenharmony_ci INVALID_VALUE is generated. If no data exists for <index> 0 is returned 8465bd8deadSopenharmony_ci three times in <values>. 8475bd8deadSopenharmony_ci 8485bd8deadSopenharmony_ci To query the attributes to stream to a buffer object when a vertex and/or 8495bd8deadSopenharmony_ci geometry shader is active, use the command 8505bd8deadSopenharmony_ci GetTransformFeedbackVaryingNV(), as explained in section 6.1.14. 8515bd8deadSopenharmony_ci 8525bd8deadSopenharmony_ci (add to Section 6.1.14, Shader and Program Queries, p. 256) 8535bd8deadSopenharmony_ci 8545bd8deadSopenharmony_ci Add the following paragraph to the bottom of page 257: 8555bd8deadSopenharmony_ci 8565bd8deadSopenharmony_ci If <pname> is TRANSFORM_FEEDBACK_BUFFER_MODE_NV, the buffer mode, 8575bd8deadSopenharmony_ci used when transform feedback is active, is returned. It can be one of 8585bd8deadSopenharmony_ci SEPARATE_ATTRIBS_NV or INTERLEAVED_ATTRIBS_NV. If <pname> is 8595bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_VARINGS_NV, the number of varying variables to stream 8605bd8deadSopenharmony_ci to one, or more, buffer objects are returned. If <pname> is 8615bd8deadSopenharmony_ci ACTIVE_VARYINGS_NV, the number of active varying variables is 8625bd8deadSopenharmony_ci returned. If no active varyings exist, 0 is returned. If <pname> is 8635bd8deadSopenharmony_ci ACTIVE_VARYINGS_MAX_LENGTH_NV, the length of the longest active varying 8645bd8deadSopenharmony_ci name, including a null terminator, is returned. If no active varying 8655bd8deadSopenharmony_ci variable exists, 0 is returned. 8665bd8deadSopenharmony_ci 8675bd8deadSopenharmony_ci The command 8685bd8deadSopenharmony_ci 8695bd8deadSopenharmony_ci void GetTransformFeedbackVaryingNV(uint program, uint index, 8705bd8deadSopenharmony_ci int *location) 8715bd8deadSopenharmony_ci 8725bd8deadSopenharmony_ci returns, for each <index>, the location of a varying variable to stream to 8735bd8deadSopenharmony_ci a buffer object in <location>. The <index> element of the array 8745bd8deadSopenharmony_ci <locations>, as passed to TransformFeedbackVaryingsNV, is 8755bd8deadSopenharmony_ci returned. <index> has to be in the program object specific range 0 to 8765bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_VARYINGS_NV - 1, otherwise the error INVALID_VALUE is 8775bd8deadSopenharmony_ci generated. If no location exists for <index>, -1 is returned. If <program> 8785bd8deadSopenharmony_ci is not the name of a program object, or if program object has not been 8795bd8deadSopenharmony_ci linked successfully, the error INVALID_OPERATION is generated. 8805bd8deadSopenharmony_ci 8815bd8deadSopenharmony_ciAdditions to Appendix A of the OpenGL 2.0 Specification (Invariance) 8825bd8deadSopenharmony_ci 8835bd8deadSopenharmony_ci None. 8845bd8deadSopenharmony_ci 8855bd8deadSopenharmony_ciAdditions to the AGL/GLX/WGL Specifications 8865bd8deadSopenharmony_ci 8875bd8deadSopenharmony_ci None. 8885bd8deadSopenharmony_ci 8895bd8deadSopenharmony_ciGLX Protocol 8905bd8deadSopenharmony_ci 8915bd8deadSopenharmony_ci UNDER DEVELOPMENT 8925bd8deadSopenharmony_ci 8935bd8deadSopenharmony_ciInteractions with EXT_timer_query 8945bd8deadSopenharmony_ci 8955bd8deadSopenharmony_ci EXT_timer_query is the first extension to generalize the BeginQuery and 8965bd8deadSopenharmony_ci EndQuery mechanism introduced by ARB_occlusion_query and OpenGL 1.5 to 8975bd8deadSopenharmony_ci cover an additional query type. This extension is the second. This 8985bd8deadSopenharmony_ci extension is written against the OpenGL 2.0 specification and uses most of 8995bd8deadSopenharmony_ci the modifications in the EXT_timer_query specification. If 9005bd8deadSopenharmony_ci EXT_timer_query is supported, timer queries need to be added as a third 9015bd8deadSopenharmony_ci query type. 9025bd8deadSopenharmony_ci 9035bd8deadSopenharmony_ciDependencies on NV_geometry_program4 and EXT_geometry_shader4 9045bd8deadSopenharmony_ci 9055bd8deadSopenharmony_ci If NV_geometry_program4 is not supported, delete the reference to the 9065bd8deadSopenharmony_ci output primitive type in Section 2.Y. Delete the reference to 9075bd8deadSopenharmony_ci PRIMITIVE_ID_NV and LAYER_NV. 9085bd8deadSopenharmony_ci 9095bd8deadSopenharmony_ci If EXT_geometry_shader4 is not supported, delete any reference to a 9105bd8deadSopenharmony_ci geometry shader. 9115bd8deadSopenharmony_ci 9125bd8deadSopenharmony_ciDependencies on NV_vertex_program4 and NV_gpu_program4 9135bd8deadSopenharmony_ci 9145bd8deadSopenharmony_ci If NV_vertex_program4 is not supported, delete any reference to 9155bd8deadSopenharmony_ci VERTEX_ID_NV. If NV_gpu_program4 is not supported, table X.2 needs to 9165bd8deadSopenharmony_ci refer to the "result" variables defined in the ARB_vertex_program 9175bd8deadSopenharmony_ci specification instead. 9185bd8deadSopenharmony_ci 9195bd8deadSopenharmony_ciInteractions with ARB_shader_objects and OpenGL 2.0 9205bd8deadSopenharmony_ci 9215bd8deadSopenharmony_ci If neither ARB_shader_objects nor OpenGL 2.0 is supported, all references 9225bd8deadSopenharmony_ci to shader and program objects, as well as varying variables, should be 9235bd8deadSopenharmony_ci removed. This also means that functions including 9245bd8deadSopenharmony_ci TransformFeedbackVaryingsNV, GetVaryingLocationNV, GetActiveVaryingNV, 9255bd8deadSopenharmony_ci ActiveVaryingNV, and GetTransformFeedbackVaryingNV will not be 9265bd8deadSopenharmony_ci supported, and enums that are relevant only in the context of shader and 9275bd8deadSopenharmony_ci program objects will not be accepted. 9285bd8deadSopenharmony_ci 9295bd8deadSopenharmony_ciErrors 9305bd8deadSopenharmony_ci 9315bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by BeginQuery if called with an 9325bd8deadSopenharmony_ci <id> of zero, if the active query object name for <target> is non- zero, 9335bd8deadSopenharmony_ci or if <id> is the active query object name for any query type. 9345bd8deadSopenharmony_ci 9355bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by EndQuery if the active query 9365bd8deadSopenharmony_ci object name for <target> is zero. 9375bd8deadSopenharmony_ci 9385bd8deadSopenharmony_ci The error INVALID_OPERATION is generated if Begin, or any command that 9395bd8deadSopenharmony_ci performs an explicit Begin, is called when: 9405bd8deadSopenharmony_ci 9415bd8deadSopenharmony_ci * A geometry program or shader is not active AND the begin mode does not 9425bd8deadSopenharmony_ci match the allowed begin modes for the current transform feedback state 9435bd8deadSopenharmony_ci as given by table X.1. 9445bd8deadSopenharmony_ci 9455bd8deadSopenharmony_ci * A geometry program or shader is active AND the output primitive type 9465bd8deadSopenharmony_ci (of the geometry program / shader) does not match the allowed begin 9475bd8deadSopenharmony_ci modes for the current transform feedback state as given by table X.1. 9485bd8deadSopenharmony_ci 9495bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by BeginTransformFeedbackNV if 9505bd8deadSopenharmony_ci there is no buffer object bound to index 0 in INTERLEAVED_ATTRIBS_NV 9515bd8deadSopenharmony_ci mode. 9525bd8deadSopenharmony_ci 9535bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by BeginTransformFeedbackNV if 9545bd8deadSopenharmony_ci the number of buffer objects bound in SEPARATE_ATTRIBS_NV mode is less 9555bd8deadSopenharmony_ci than the number of buffer objects required, as given by the current 9565bd8deadSopenharmony_ci transform feedback state. 9575bd8deadSopenharmony_ci 9585bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by BeginTransformFeedbackNV if 9595bd8deadSopenharmony_ci no attributes are specified to be captured. 9605bd8deadSopenharmony_ci 9615bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by BeginTransformFeedbackNV, 9625bd8deadSopenharmony_ci TransformFeedbackVaryingsNV, TransformFeedbackAttribsNV, or UseProgram or 9635bd8deadSopenharmony_ci LinkProgram, called on the currently in use program object, while 9645bd8deadSopenharmony_ci transform feedback is active. 9655bd8deadSopenharmony_ci 9665bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by EndTransformFeedbackNV while 9675bd8deadSopenharmony_ci transform feedback is inactive. 9685bd8deadSopenharmony_ci 9695bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by BindBufferRangeNV, 9705bd8deadSopenharmony_ci BindBufferOffsetNV or BindBufferBaseNV if <target> is 9715bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_BUFFER_NV and <index> is greater or equal 9725bd8deadSopenharmony_ci than MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV. 9735bd8deadSopenharmony_ci 9745bd8deadSopenharmony_ci The error INVALID_VALUE is generated by BindBufferRangeNV if the value of 9755bd8deadSopenharmony_ci <size> <= 0. 9765bd8deadSopenharmony_ci 9775bd8deadSopenharmony_ci The error INVALID_VALUE is generated by BindBufferRangeNV or 9785bd8deadSopenharmony_ci BindBufferOffsetNV if <start> or <end> are not word-aligned. 9795bd8deadSopenharmony_ci 9805bd8deadSopenharmony_ci The error INVALID_OPERATION is generated when any of the BindBuffer* 9815bd8deadSopenharmony_ci commands is called while transform feedback is active. 9825bd8deadSopenharmony_ci 9835bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by TransformFeedbackVaryingsNV 9845bd8deadSopenharmony_ci commands if any location appears more than once in the array <locations. 9855bd8deadSopenharmony_ci 9865bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by TransformFeedbackVaryingsNV 9875bd8deadSopenharmony_ci if any location in <locations> references a non-existing varying variable. 9885bd8deadSopenharmony_ci 9895bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by TransformFeedbackVaryingsNV 9905bd8deadSopenharmony_ci if <program> has not been linked successfully. 9915bd8deadSopenharmony_ci 9925bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by TransformFeedbackVaryingsNV 9935bd8deadSopenharmony_ci in INTERLEAVED_ATTRIBS_NV mode if the total number of components of all 9945bd8deadSopenharmony_ci varying variables specified in the array <locations> is greater than 9955bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV. 9965bd8deadSopenharmony_ci 9975bd8deadSopenharmony_ci The error INVALID_VALUE is generated by TransformFeedbackVaryingsNV or 9985bd8deadSopenharmony_ci TransformFeedbackAttribsNV in SEPARATE_ATTRIBS_NV mode if <count> is 9995bd8deadSopenharmony_ci greater than MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV. 10005bd8deadSopenharmony_ci 10015bd8deadSopenharmony_ci The error INVALID_VALUE is generated by TransformFeedbackVaryingsNV in 10025bd8deadSopenharmony_ci SEPARATE_ATTRIBS_NV mode if the number of components for each varying 10035bd8deadSopenharmony_ci variable in the array <locations> is greater than 10045bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV. 10055bd8deadSopenharmony_ci 10065bd8deadSopenharmony_ci The error INVALID_VALUE is generated by TransformFeedbackAttribsNV in 10075bd8deadSopenharmony_ci INTERLEAVED_ATTRIBS_NV mode if the sum of the values of the components of 10085bd8deadSopenharmony_ci the attributes in the array <attribs> is greater than 10095bd8deadSopenharmony_ci MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV. 10105bd8deadSopenharmony_ci 10115bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by TransformFeedbackAttribsNV if 10125bd8deadSopenharmony_ci an enum value is specified more than once in the array <attribs>. 10135bd8deadSopenharmony_ci 10145bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by TransformFeedbackAttribsNV if 10155bd8deadSopenharmony_ci the number of components for each attribute in the array <attribs> is 10165bd8deadSopenharmony_ci outside the range [0,4]. 10175bd8deadSopenharmony_ci 10185bd8deadSopenharmony_ci The error INVALID_VALUE is generated by TransformFeedbackAttribsNV if the 10195bd8deadSopenharmony_ci index value is in the array <attribs> is outside the allowable range for 10205bd8deadSopenharmony_ci an attribute enumerant corresponding to more than one real attribute. 10215bd8deadSopenharmony_ci 10225bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by GetVaryingLocationNV if 10235bd8deadSopenharmony_ci <program> is not the name of a program object or if <program> has not been 10245bd8deadSopenharmony_ci linked successfully. 10255bd8deadSopenharmony_ci 10265bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by GetActiveVaryingNV or 10275bd8deadSopenharmony_ci ActiveVaryingNV if <program> is not the name of a program object. 10285bd8deadSopenharmony_ci 10295bd8deadSopenharmony_ci The error INVALID_VALUE is generated by GetActiveVaryingNV if <index> is 10305bd8deadSopenharmony_ci greater than or equal to ACTIVE_VARYINGS_NV. 10315bd8deadSopenharmony_ci 10325bd8deadSopenharmony_ci The error INVALID_VALUE is generated by GetIntegerIndexedvEXT() or 10335bd8deadSopenharmony_ci GetBooleanIndexedv() with <param> set to TRANSFORM_FEEDBACK_RECORD_NV if 10345bd8deadSopenharmony_ci <index> is greater than or equal to TRANSFORM_FEEDBACK_ATTRIBS_NV. 10355bd8deadSopenharmony_ci 10365bd8deadSopenharmony_ci The error INVALID_VALUE is generated by GetIntegerIndexedvEXT() or 10375bd8deadSopenharmony_ci GetBooleanIndexedvEXT() with <param> set to 10385bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_BUFFER_BINDING_NV if <index> is greater than or equal 10395bd8deadSopenharmony_ci to MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV. 10405bd8deadSopenharmony_ci 10415bd8deadSopenharmony_ci The error INVALID_VALUE is generated by GetTransformFeedbackVaryingsNV if 10425bd8deadSopenharmony_ci <index> is greater than the program object specific value 10435bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_VARYINGS_NV - 1. 10445bd8deadSopenharmony_ci 10455bd8deadSopenharmony_ci The error INVALID_OPERATION is generated by 10465bd8deadSopenharmony_ci GetTransformFeedbackVaryingsNV if <program> is not the name of a program 10475bd8deadSopenharmony_ci object, or if program object has not been linked successfully. 10485bd8deadSopenharmony_ci 10495bd8deadSopenharmony_ciNew State 10505bd8deadSopenharmony_ci 10515bd8deadSopenharmony_ci (Add a new table: Table 6.X, Transform Feedback State) 10525bd8deadSopenharmony_ci 10535bd8deadSopenharmony_ci Get Value Type Get Command Init. Value Description Sec Attrib 10545bd8deadSopenharmony_ci ------------------ ------ -------------- ------------ ------------------------- ----- ------ 10555bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ Z2 GetIntegerv INTERLEAVED_ Transform feedback mode 2.Y - 10565bd8deadSopenharmony_ci BUFFER_MODE_NV ATTRIBS_NV 10575bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ Z2 GetIntegerv 0 Number of attributes to 2.Y - 10585bd8deadSopenharmony_ci ATTRIBS_NV capture in transform 10595bd8deadSopenharmony_ci feedback mode 10605bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ Z+ GetIntegerv 0 Buffer object bound to 6.1.13 - 10615bd8deadSopenharmony_ci BUFFER_BINDING_NV generic bind point for 10625bd8deadSopenharmony_ci transform feedback. 10635bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ nx3*Z+ GetInteger- 0 Name, component count, 6.1.14 - 10645bd8deadSopenharmony_ci RECORD_NV IndexedvEXT and index of each 10655bd8deadSopenharmony_ci attribute captured 10665bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ nxZ+ GetInteger- 0 Buffer object bound to 6.1.13 - 10675bd8deadSopenharmony_ci BUFFER_BINDING_NV IndexedvEXT each transform feedback 10685bd8deadSopenharmony_ci attribute stream. 10695bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ nxZ+ GetInteger- 0 Start offset of binding 6.1.13 - 10705bd8deadSopenharmony_ci BUFFER_START_NV IndexedvEXT range for each transform 10715bd8deadSopenharmony_ci feedback attrib. stream 10725bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ nxZ+ GetInteger- 0 Size of binding range 6.1.13 - 10735bd8deadSopenharmony_ci BUFFER_SIZE_NV IndexedvEXT for each transform 10745bd8deadSopenharmony_ci feedback attrib. stream 10755bd8deadSopenharmony_ci 10765bd8deadSopenharmony_ci (Modify Table 6.37, p 298, updating the query object state to cover 10775bd8deadSopenharmony_ci transform feedback.) 10785bd8deadSopenharmony_ci 10795bd8deadSopenharmony_ci Get Value Type Get Command Init. Value Description Sec Attribute 10805bd8deadSopenharmony_ci ---------------- ---- ---------------- ----------- ------------------------- ----- --------- 10815bd8deadSopenharmony_ci CURRENT_QUERY 3xZ+ GetQueryiv 0 Active query object name 2.X - 10825bd8deadSopenharmony_ci (occlusion, timer, xform 10835bd8deadSopenharmony_ci feedback) 10845bd8deadSopenharmony_ci QUERY_RESULT 3xZ+ GetQueryObjectiv 0 Query object result 2.X - 10855bd8deadSopenharmony_ci (samples passed, Time 10865bd8deadSopenharmony_ci elapsed, feedback data amount) 10875bd8deadSopenharmony_ci QUERY_RESULT_AVAILABLE 3xZ+ GetQueryObjectiv TRUE Query object result 2.X - 10885bd8deadSopenharmony_ci available? 10895bd8deadSopenharmony_ci 10905bd8deadSopenharmony_ci (Modify Table 6.29, p. 290, Program Object State. Add the following state.) 10915bd8deadSopenharmony_ci 10925bd8deadSopenharmony_ci Get Value Type Get Command Init. Value Description Sec Attribute 10935bd8deadSopenharmony_ci ---------------- ---- ------------ ----------- ------------------------- ----- --------- 10945bd8deadSopenharmony_ci ACTIVE_VARYINGS_NV Z+ GetProgramiv 0 Number of active varyings 2.15.3 - 10955bd8deadSopenharmony_ci ACTIVE_VARYING_MAX_ Z+ GetProgramiv 0 Maximum active varying 2.15.3 - 10965bd8deadSopenharmony_ci LENGTH_NV name length 10975bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ Z2 GetProgramiv INTERLEAVED_ Transform feedback mode 6.1.14 - 10985bd8deadSopenharmony_ci BUFFER_MODE_NV ATTRIBS_NV for the program 10995bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_ Z+ GetProgramiv 0 Number of varyings to 6.1.14 - 11005bd8deadSopenharmony_ci VARYINGS_NV stream to buffer object(s) 11015bd8deadSopenharmony_ci - nxZ+ GetVarying- - Location of each active 2.15.3 - 11025bd8deadSopenharmony_ci LocationNV varying variable 11035bd8deadSopenharmony_ci - Z+ GetActive- - Size of each active 2.15.3 - 11045bd8deadSopenharmony_ci VaryingNV varying variable 11055bd8deadSopenharmony_ci - Z+ GetActive- - Type of each active 2.15.3 - 11065bd8deadSopenharmony_ci VaryingNV varying variable 11075bd8deadSopenharmony_ci - 0+x- GetActive- - Name of each active 2.15.3 - 11085bd8deadSopenharmony_ci char VaryingNV varying variable 11095bd8deadSopenharmony_ci - Z+ GetTransform- - Varying location for one 6.1.14 - 11105bd8deadSopenharmony_ci Feedback- of the multiple varyings 11115bd8deadSopenharmony_ci VaryingNV to capture 11125bd8deadSopenharmony_ci 11135bd8deadSopenharmony_ciNew Implementation Dependent State 11145bd8deadSopenharmony_ci 11155bd8deadSopenharmony_ci (Modify Table 6.34, p. 295. Update the query object state to cover 11165bd8deadSopenharmony_ci transform feedback.) 11175bd8deadSopenharmony_ci 11185bd8deadSopenharmony_ci Get Value Type Get Command Minimum Value Description Sec Attribute 11195bd8deadSopenharmony_ci -------------------- ---- ----------- ------------- -------------------------- ------ --------- 11205bd8deadSopenharmony_ci QUERY_COUNTER_BITS 2xZ+ GetQueryiv see 6.1.12 Asynchronous query counter 6.1.12 - 11215bd8deadSopenharmony_ci bits (occlusion, timer, 11225bd8deadSopenharmony_ci transform feedback queries) 11235bd8deadSopenharmony_ci 11245bd8deadSopenharmony_ci (Add a new table, Table 6.X. Transform Feedback State.) 11255bd8deadSopenharmony_ci 11265bd8deadSopenharmony_ci NOTE: In the "GetValue" columns below, MXFB stands for 11275bd8deadSopenharmony_ci "MAX_TRANSFORM_FEEDBACK". 11285bd8deadSopenharmony_ci 11295bd8deadSopenharmony_ci Get Value Type Get Command Minimum Value Description Sec Attribute 11305bd8deadSopenharmony_ci -------------------- ---- ----------- ------------- -------------------------- ------ --------- 11315bd8deadSopenharmony_ci MXFB_INTERLEAVED_ Z+ GetIntegerv 64 Max number of components to 2.Y - 11325bd8deadSopenharmony_ci COMPONENTS_NV write to a single buffer in 11335bd8deadSopenharmony_ci interleaved mode 11345bd8deadSopenharmony_ci MXFB_SEPARATE_ Z+ GetIntegerv 4 Max number of separate 2.Y - 11355bd8deadSopenharmony_ci ATTRIBS_NV attributes or varyings that 11365bd8deadSopenharmony_ci can be captured in transform 11375bd8deadSopenharmony_ci feedback 11385bd8deadSopenharmony_ci MXFB_SEPARATE Z+ GetIntegerv 4 Max number of components 2.Y - 11395bd8deadSopenharmony_ci COMPONENTS_NV per attribute or varying 11405bd8deadSopenharmony_ci in separate mode 11415bd8deadSopenharmony_ci 11425bd8deadSopenharmony_ciIssues 11435bd8deadSopenharmony_ci 11445bd8deadSopenharmony_ci 1. How does transform feedback differ from core GL feedback? 11455bd8deadSopenharmony_ci 11465bd8deadSopenharmony_ci * Transform feedback writes vertex data to buffer objects, which allows 11475bd8deadSopenharmony_ci the data returned to be used directly by vertex pulling. GL feedback 11485bd8deadSopenharmony_ci mode writes vertex data to a buffer in system memory. 11495bd8deadSopenharmony_ci 11505bd8deadSopenharmony_ci * Transform feedback is done after transformation, but prior to 11515bd8deadSopenharmony_ci clipping. The primitives returned contain the original transformed 11525bd8deadSopenharmony_ci vertices produced by vertex or geometry program execution, and does 11535bd8deadSopenharmony_ci not contain any primitives inserted by clipping. 11545bd8deadSopenharmony_ci 11555bd8deadSopenharmony_ci * Transform feedback supports only a single basic output primitive type 11565bd8deadSopenharmony_ci (points, lines, or triangles), while core GL feedback mode supports 11575bd8deadSopenharmony_ci all primitive types. Since only one primitive type is supported, the 11585bd8deadSopenharmony_ci data returned does not contain tokens describing each primitive being 11595bd8deadSopenharmony_ci fed back. Primitive tokens make the data returned by GL feedback mode 11605bd8deadSopenharmony_ci irregular and unsuitable for vertex pulling. 11615bd8deadSopenharmony_ci 11625bd8deadSopenharmony_ci 2. What should this extension be called? 11635bd8deadSopenharmony_ci 11645bd8deadSopenharmony_ci RESOLVED: The current name is "NV_transform_feedback", playing off the 11655bd8deadSopenharmony_ci fact that it is transformed primitives that are handled and the 11665bd8deadSopenharmony_ci similarities to GL feedback mode. 11675bd8deadSopenharmony_ci 11685bd8deadSopenharmony_ci 3. What happens if you bind a buffer for transform feedback that is 11695bd8deadSopenharmony_ci currently bound for other purposes? Should we somehow detect this case 11705bd8deadSopenharmony_ci and produce an error? 11715bd8deadSopenharmony_ci 11725bd8deadSopenharmony_ci !!! NBC I feel strongly that we should follow the precedent for 11735bd8deadSopenharmony_ci Map/Unmap. The reason that MapBuffer and UnmapBuffer are a precedent 11745bd8deadSopenharmony_ci here is because while a buffer object is in the mapped state, no GL 11755bd8deadSopenharmony_ci commands are allowed to operate on the buffer object's data. So by 11765bd8deadSopenharmony_ci analogy, while a buffer is being used for transform feedback, no other 11775bd8deadSopenharmony_ci GL commands should be allowed to operate on the buffer object's data. 11785bd8deadSopenharmony_ci This includes initiating any rendering which would cause the GL to 11795bd8deadSopenharmony_ci source data from an active transform feedback buffer object. 11805bd8deadSopenharmony_ci 11815bd8deadSopenharmony_ci UNRESOLVED 11825bd8deadSopenharmony_ci 11835bd8deadSopenharmony_ci 4. Should this extension include any new buffer object binding targets, or 11845bd8deadSopenharmony_ci should it overload ARRAY_BUFFER, or should we skip the binding target 11855bd8deadSopenharmony_ci altogether in favor of a buffer object name accepted directly by the 11865bd8deadSopenharmony_ci new GL commands? 11875bd8deadSopenharmony_ci 11885bd8deadSopenharmony_ci RESOLVED: There are new binding points for XFB along with a new API 11895bd8deadSopenharmony_ci (BindBufferBase etc) to set the internal binding points. A new binding 11905bd8deadSopenharmony_ci point, TRANSFORM_FEEDBACK_BUFFER_NV is also introduced. 11915bd8deadSopenharmony_ci 11925bd8deadSopenharmony_ci 5. Previous buffer object extensions provided a way to have existing GL 11935bd8deadSopenharmony_ci commands reference a buffer object instead of a user-supplied buffer. 11945bd8deadSopenharmony_ci Should the new commands introduced here allow referencing a 11955bd8deadSopenharmony_ci user-supplied buffer in addition to a buffer object? 11965bd8deadSopenharmony_ci 11975bd8deadSopenharmony_ci RESOLVED: No. A program can get the contents of the feedback buffer back 11985bd8deadSopenharmony_ci to the CPU using MapBuffer and GetBufferSubData 11995bd8deadSopenharmony_ci 12005bd8deadSopenharmony_ci 6. Is BeginTransformFeedback really necessary? Could the query just 12015bd8deadSopenharmony_ci initiate the transform feedback mode? 12025bd8deadSopenharmony_ci 12035bd8deadSopenharmony_ci RESOLUTION: Using BeginTransformFeedback and EndTransformFeedback gives 12045bd8deadSopenharmony_ci a clean place to spec all of the transform-feedback-specific issues 12055bd8deadSopenharmony_ci without cluttering up the query language. Also, the queries don't have 12065bd8deadSopenharmony_ci to be done at the same time as beginning and ending the feedback 12075bd8deadSopenharmony_ci process. 12085bd8deadSopenharmony_ci 12095bd8deadSopenharmony_ci 7. What usage enums should be provided to glBufferData for use in 12105bd8deadSopenharmony_ci conjunction with transform feedback? 12115bd8deadSopenharmony_ci 12125bd8deadSopenharmony_ci RESOLVED: STREAM_COPY or STREAM_READ are expected to be the most common 12135bd8deadSopenharmony_ci usages. If a buffer object is being written by the GL through transform 12145bd8deadSopenharmony_ci feedback, and the contents of the buffer object are subsequently being 12155bd8deadSopenharmony_ci consumed by the GL (e.g. by being used as a vertex buffer object), then 12165bd8deadSopenharmony_ci this is a *_COPY usage. If the buffer object is being written by the GL 12175bd8deadSopenharmony_ci through transform feedback, but is being consumed by the application 12185bd8deadSopenharmony_ci (e.g. being mapped for read), this is a *_READ usage. The temporal 12195bd8deadSopenharmony_ci (STREAM, STATIC, or DYNAMIC) component of the usage enum is determined 12205bd8deadSopenharmony_ci by the ratio between how often the contents of the buffer object are 12215bd8deadSopenharmony_ci modified and how often operations that source data from the buffer 12225bd8deadSopenharmony_ci object occur. 12235bd8deadSopenharmony_ci 12245bd8deadSopenharmony_ci 8. What should the behavior be when a buffer object is the active target 12255bd8deadSopenharmony_ci of transform feedback, and it is deleted via DeleteBuffers? 12265bd8deadSopenharmony_ci 12275bd8deadSopenharmony_ci RESOLVED: Deletion is deferred until the EndTransformFeedback if 12285bd8deadSopenharmony_ci transform feedback is active. 12295bd8deadSopenharmony_ci 12305bd8deadSopenharmony_ci 9. Should we allow more buffers to be bound than are used? 12315bd8deadSopenharmony_ci 12325bd8deadSopenharmony_ci RESOLVED: Yes. The extra buffers are not in the way and can stay bound. 12335bd8deadSopenharmony_ci 12345bd8deadSopenharmony_ci 10. Should we allow feedback to buffer lists with holes (i.e. 0 and 2 12355bd8deadSopenharmony_ci bound)? 12365bd8deadSopenharmony_ci 12375bd8deadSopenharmony_ci RESOLVED: No. This makes for an ugly API with the potential for bugs, 12385bd8deadSopenharmony_ci without any real benefit. The application can as well bind all buffers 12395bd8deadSopenharmony_ci needed to incremented indices. It is an invalid operation to not have a 12405bd8deadSopenharmony_ci buffer bound where one is required. 12415bd8deadSopenharmony_ci 12425bd8deadSopenharmony_ci 11. Why only one feedback primitive mode per feedback invocation? 12435bd8deadSopenharmony_ci 12445bd8deadSopenharmony_ci RESOLVED: Having primitive tokens breaks up the stream and makes it less 12455bd8deadSopenharmony_ci amenable to being read back in as a vertex buffer. Also, mixing multiple 12465bd8deadSopenharmony_ci primitive types makes the counting of primitives less clear for the 12475bd8deadSopenharmony_ci application. 12485bd8deadSopenharmony_ci 12495bd8deadSopenharmony_ci 12. Is RasterPos fed back? 12505bd8deadSopenharmony_ci 12515bd8deadSopenharmony_ci RESOLVED: No. 12525bd8deadSopenharmony_ci 12535bd8deadSopenharmony_ci 13. Is DrawPixels/CopyPixels/Bitmap fed back? 12545bd8deadSopenharmony_ci 12555bd8deadSopenharmony_ci RESOLVED: No. Rasterization occurs as normal, but there is no 12565bd8deadSopenharmony_ci output to the feedback buffer. This is consistent with taking a 12575bd8deadSopenharmony_ci tap out of the pipe before clipping. 12585bd8deadSopenharmony_ci 12595bd8deadSopenharmony_ci 14. Why do we need new BindBuffer* functions? 12605bd8deadSopenharmony_ci 12615bd8deadSopenharmony_ci RESOLVED: All previous buffer object extensions have been retrofits of 12625bd8deadSopenharmony_ci existing pointer-based APIs. New extensions built assuming buffer 12635bd8deadSopenharmony_ci objects don't have that history, so need a new API. The functionality of 12645bd8deadSopenharmony_ci these new functions combines the functionality of BindBuffer, to set the 12655bd8deadSopenharmony_ci external bind point used by calls like MapBuffer and BufferSubData, with 12665bd8deadSopenharmony_ci the functionality to set an internal bind point like VertexAttribPointer 12675bd8deadSopenharmony_ci does. 12685bd8deadSopenharmony_ci 12695bd8deadSopenharmony_ci 15. How do the transform feedback indices, passed to the BindBuffer* 12705bd8deadSopenharmony_ci commands, work with multiple bindings? 12715bd8deadSopenharmony_ci 12725bd8deadSopenharmony_ci RESOLVED: The same way that they work with vertex arrays. There is one 12735bd8deadSopenharmony_ci external bind point, TRANSFORM_FEEDBACK_BUFFER_NV. There are n internal 12745bd8deadSopenharmony_ci bind points, selected with the <index> parameter to the BindBuffer* 12755bd8deadSopenharmony_ci commands, where n is some implementation dependent limit. The 12765bd8deadSopenharmony_ci BindBuffer* commands take the buffer passed and bind it to the external 12775bd8deadSopenharmony_ci bind point, as well as to the selected internal bind point. 12785bd8deadSopenharmony_ci 12795bd8deadSopenharmony_ci For example: 12805bd8deadSopenharmony_ci 12815bd8deadSopenharmony_ci BindBufferOffsetNV(TRANSFORM_FEEDBACK_BUFFER_NV, 0, 1, 12); 12825bd8deadSopenharmony_ci // XFB index 0 points at buffer 1 with offset 12 12835bd8deadSopenharmony_ci 12845bd8deadSopenharmony_ci BindBuffer(TRANSFORM_FEEDBACK_BUFFER_NV, 2); 12855bd8deadSopenharmony_ci // Buffer 2 is now bound to the external bind point. XFB index 0 still 12865bd8deadSopenharmony_ci // points at buffer 1 12875bd8deadSopenharmony_ci 12885bd8deadSopenharmony_ci MapBuffer(TRANSFORM_FEEDBACK_BUFFER_NV, ...); 12895bd8deadSopenharmony_ci // Maps buffer 2 12905bd8deadSopenharmony_ci 12915bd8deadSopenharmony_ci 16. How are quads/quadstrips/polygons tessellated into triangles? 12925bd8deadSopenharmony_ci 12935bd8deadSopenharmony_ci RESOLVED: In an implementation-dependent manner. OpenGL doesn't define 12945bd8deadSopenharmony_ci quads or polygons in terms of triangles, so there is no one correct way 12955bd8deadSopenharmony_ci to do it, and different GPUs may implement the behavior differently. A 12965bd8deadSopenharmony_ci quad may be split into two triangles in several different ways, and an 12975bd8deadSopenharmony_ci application may not rely on this behavior. 12985bd8deadSopenharmony_ci 12995bd8deadSopenharmony_ci 17. How does this extension interact with display lists? 13005bd8deadSopenharmony_ci 13015bd8deadSopenharmony_ci RESOLVED: Just like the VBO extension, none of the BindBuffer* commands 13025bd8deadSopenharmony_ci are compiled into a display list. 13035bd8deadSopenharmony_ci 13045bd8deadSopenharmony_ci 18. Does polygon mode state affect the logic that determines if the 13055bd8deadSopenharmony_ci transform feed back primitive mode and the render mode states are 13065bd8deadSopenharmony_ci valid at the start of transform feedback mode? 13075bd8deadSopenharmony_ci 13085bd8deadSopenharmony_ci RESOLVED: PolygonMode has no influence on the BeginTransFormFeedback 13095bd8deadSopenharmony_ci primitiveMode check since it is performed later, in raster. 13105bd8deadSopenharmony_ci 13115bd8deadSopenharmony_ci 19. What to do with incomplete primitives? 13125bd8deadSopenharmony_ci 13135bd8deadSopenharmony_ci RESOLVED: If there is no room to store one or more vertices of a 13145bd8deadSopenharmony_ci primitive in a buffer object, none of the vertices in that primitive are 13155bd8deadSopenharmony_ci written to the buffer. If a partial primitive enters transform feedback 13165bd8deadSopenharmony_ci (i.e. only two vertices sent in triangles mode), none of the vertices in 13175bd8deadSopenharmony_ci that primitive are written to the buffer object. 13185bd8deadSopenharmony_ci 13195bd8deadSopenharmony_ci 20. Why does TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV have a 13205bd8deadSopenharmony_ci TRANSFORM_FEEDBACK prefix but PRIMITIVES_GENERATED_NV doesn't? 13215bd8deadSopenharmony_ci 13225bd8deadSopenharmony_ci RESOLVED: The number of primitives generated is independent of any 13235bd8deadSopenharmony_ci feedback that is active. The number of primitives that are written is 13245bd8deadSopenharmony_ci only valid for transform feedback - another extension could conceivably 13255bd8deadSopenharmony_ci have a different way of writing out primitives that would require a 13265bd8deadSopenharmony_ci similar but distinct token. 13275bd8deadSopenharmony_ci 13285bd8deadSopenharmony_ci 21. When a GLSL vertex shader is active, what happens in transform 13295bd8deadSopenharmony_ci feedback mode if non-active varying variables are specified? 13305bd8deadSopenharmony_ci 13315bd8deadSopenharmony_ci DISCUSSION: Active varying variables are varying variables, declared in 13325bd8deadSopenharmony_ci the shader, that the linker determined are actually needed. As an 13335bd8deadSopenharmony_ci optimization, the linker can discard the ones declared, but not 13345bd8deadSopenharmony_ci needed. If non-active varying variables need to be fed into a buffer 13355bd8deadSopenharmony_ci object, the linker should not perform this optimization. 13365bd8deadSopenharmony_ci 13375bd8deadSopenharmony_ci There are three suggested resolutions to this problem: 13385bd8deadSopenharmony_ci 13395bd8deadSopenharmony_ci 1. The set of varying variables that need to be streamed to a buffer 13405bd8deadSopenharmony_ci object in transform feedback mode are set as a property of the 13415bd8deadSopenharmony_ci program object, and are taken into account during the link step. 13425bd8deadSopenharmony_ci This means that changing the set means the application will have to 13435bd8deadSopenharmony_ci re-link the program object in order to have the change take effect. 13445bd8deadSopenharmony_ci 13455bd8deadSopenharmony_ci 2. The set of varying variables that need to be streamed to a buffer 13465bd8deadSopenharmony_ci object in transform feedback mode are specified after the program 13475bd8deadSopenharmony_ci object has been linked. This is the most flexible option from the 13485bd8deadSopenharmony_ci applications perspective, but this might mean that a) specifying 13495bd8deadSopenharmony_ci this set could force the GL to re-link 'under the covers', and b) 13505bd8deadSopenharmony_ci could mean that the GL runs out of varying variable slots because 13515bd8deadSopenharmony_ci the combined total of the set of active varyings and the varyings 13525bd8deadSopenharmony_ci to stream in transform feedback mode is too large. 13535bd8deadSopenharmony_ci 13545bd8deadSopenharmony_ci 3. This solution is a hybrid of the above two approaches. The set of 13555bd8deadSopenharmony_ci potential varying variables that need to be streamed to a buffer 13565bd8deadSopenharmony_ci object are set as a property of the program object. These varying 13575bd8deadSopenharmony_ci variables are marked as active by the application and therefore 13585bd8deadSopenharmony_ci cannot be eliminated during the link step. However, a sub-set of 13595bd8deadSopenharmony_ci varying variables to actually stream to a buffer object can be 13605bd8deadSopenharmony_ci changed without the application having to re-link the program 13615bd8deadSopenharmony_ci object. This approach gives the application flexibility to change 13625bd8deadSopenharmony_ci the set of varying variables to stream, while it eliminates the 13635bd8deadSopenharmony_ci need for the GL to compile 'under the covers'. 13645bd8deadSopenharmony_ci 13655bd8deadSopenharmony_ci RESOLUTION: Option 3 offers a good compromise, and therefore we'll go 13665bd8deadSopenharmony_ci with that. 13675bd8deadSopenharmony_ci 13685bd8deadSopenharmony_ci 22. Given option 3 in the previous resolution, how to specify that a 13695bd8deadSopenharmony_ci varying variable has to be considered active by the linker? 13705bd8deadSopenharmony_ci 13715bd8deadSopenharmony_ci DISCUSSION: There are two approaches to the application specifying which 13725bd8deadSopenharmony_ci varying variables are active. We can either provide a simple flag that 13735bd8deadSopenharmony_ci specifies that all varying variables are considered active, or we can 13745bd8deadSopenharmony_ci provide a more complex mechanism where the application can specify an 13755bd8deadSopenharmony_ci individual varying variable as being active. 13765bd8deadSopenharmony_ci 13775bd8deadSopenharmony_ci RESOLUTION: RESOLVED. The 'all or nothing' flag is a simple idea, but 13785bd8deadSopenharmony_ci has a drawback when used with a 'uber-shader' that implements many paths 13795bd8deadSopenharmony_ci to achieve an effect, but only one path is used during any run of the 13805bd8deadSopenharmony_ci shader. In this case, a lot more varying variables might be flagged as 13815bd8deadSopenharmony_ci active then really is necessary, running the risk of running out of 13825bd8deadSopenharmony_ci resources. Therefore, we'll provide a mechanism for the application to 13835bd8deadSopenharmony_ci specify on a per varying variable basis if it is active. 13845bd8deadSopenharmony_ci 13855bd8deadSopenharmony_ci 23. Given the discussion in the previous issues, should a 13865bd8deadSopenharmony_ci GetActiveVarying() command be added, modeled after the existing 13875bd8deadSopenharmony_ci getActiveUniform() command? 13885bd8deadSopenharmony_ci 13895bd8deadSopenharmony_ci DISCUSSION: Such a command will return the list of active uniforms, 13905bd8deadSopenharmony_ci after the program object has been linked. As per issue 22's resolution, 13915bd8deadSopenharmony_ci the complete set of varying variables that could be streamed to a buffer 13925bd8deadSopenharmony_ci object needs to be specified before the program object is linked. 13935bd8deadSopenharmony_ci 13945bd8deadSopenharmony_ci It can be useful to an application to stream out a subset of the active 13955bd8deadSopenharmony_ci varying variables or to find out the whole set of active varyings, 13965bd8deadSopenharmony_ci especially since the set can be implementation dependent. 13975bd8deadSopenharmony_ci 13985bd8deadSopenharmony_ci RESOLUTION: YES. 13995bd8deadSopenharmony_ci 14005bd8deadSopenharmony_ci 24. What is proper use of the command ActiveVaryingNV()? 14015bd8deadSopenharmony_ci 14025bd8deadSopenharmony_ci RESOLVED: The application is well advised to force any varying variable 14035bd8deadSopenharmony_ci live that it needs for transform feedback purposes. The set of active 14045bd8deadSopenharmony_ci varying variables are linker dependent. For example, if a program object 14055bd8deadSopenharmony_ci has no fragment shader, then the LinkProgram command cannot typically 14065bd8deadSopenharmony_ci determine which built-in varying variables, output by a geometry or 14075bd8deadSopenharmony_ci vertex shader, are active. This is because the fragment processing state 14085bd8deadSopenharmony_ci can change, and therefore such a determination cannot be made until a 14095bd8deadSopenharmony_ci render command is issued. Furthermore, any user-defined varyings are 14105bd8deadSopenharmony_ci likely to be marked as non-active if there is no fragment shader because 14115bd8deadSopenharmony_ci they are guaranteed to have no effect on fixed-function fragment 14125bd8deadSopenharmony_ci processing. If there is both a vertex (or geometry) and fragment shader 14135bd8deadSopenharmony_ci in a program object, the application can probably deduce what will be an 14145bd8deadSopenharmony_ci active varying variable, or not. But beware of any (static) flow-control 14155bd8deadSopenharmony_ci that the linker can use to do cross vertex- fragment optimization to 14165bd8deadSopenharmony_ci cull any varying variables. 14175bd8deadSopenharmony_ci 14185bd8deadSopenharmony_ci 25. Are primitives sent down the pipeline after transform feedback, or 14195bd8deadSopenharmony_ci discarded? 14205bd8deadSopenharmony_ci 14215bd8deadSopenharmony_ci RESOLVED: Primitives can be optionally discarded before rasterization by 14225bd8deadSopenharmony_ci calling Enable and Disable with RASTERIZER_DISCARD_NV. When enabled, 14235bd8deadSopenharmony_ci primitives are discarded after vertex attributes are recorded into the 14245bd8deadSopenharmony_ci buffer objects bound to transform feedback. When disabled, primitives 14255bd8deadSopenharmony_ci are passed through to the rasterization stage to be clipped and 14265bd8deadSopenharmony_ci rasterized normally. All rasterization operations are discarded, not 14275bd8deadSopenharmony_ci just those that are fed back into the buffer. 14285bd8deadSopenharmony_ci 14295bd8deadSopenharmony_ci This applies to DrawPixels, CopyPixels, Bitmap, Clear, Accum as well. 14305bd8deadSopenharmony_ci 14315bd8deadSopenharmony_ci 26. If a varying is declared as an array, is the whole array streamed out? 14325bd8deadSopenharmony_ci 14335bd8deadSopenharmony_ci RESOLVED: No, the application has to specify which elements of an array 14345bd8deadSopenharmony_ci it wants to stream out. Implementations might not be able to stream out 14355bd8deadSopenharmony_ci a large number of components to a single buffer object. If that is the 14365bd8deadSopenharmony_ci case, the application can stream each element of an array to a different 14375bd8deadSopenharmony_ci buffer object in TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS mode. 14385bd8deadSopenharmony_ci 14395bd8deadSopenharmony_ci 27. Is it possible to capture attributes when using the fixed-function 14405bd8deadSopenharmony_ci pipeline? 14415bd8deadSopenharmony_ci 14425bd8deadSopenharmony_ci RESOLVED: Yes, there is nothing that precludes this. The application is 14435bd8deadSopenharmony_ci responsible for sending down the needed vertex attributes and setting 14445bd8deadSopenharmony_ci the GL state, as desired, for the attributes it wants to stream to a 14455bd8deadSopenharmony_ci buffer object. Note that VERTEX_ID_NV is not defined in fixed-function. 14465bd8deadSopenharmony_ci 14475bd8deadSopenharmony_ci 28. Is it possible to record hardware-generated primitive ID values that 14485bd8deadSopenharmony_ci would be available to a pixel shader? 14495bd8deadSopenharmony_ci 14505bd8deadSopenharmony_ci RESOLVED: Transform feedback can only record the primitive ID values 14515bd8deadSopenharmony_ci emitted per-vertex by a geometry shader or program. While each 14525bd8deadSopenharmony_ci primitive recorded for transform-feedback has a well-defined primitive 14535bd8deadSopenharmony_ci ID, transform feedback is only capable of recording the attributes of 14545bd8deadSopenharmony_ci individual vertices. 14555bd8deadSopenharmony_ci 14565bd8deadSopenharmony_ci 29. Does transform feedback support the ability to capture per-vertex 14575bd8deadSopenharmony_ci layer outputs, as provided by EXT_geometry_shader4 and 14585bd8deadSopenharmony_ci NV_geometry_program4? 14595bd8deadSopenharmony_ci 14605bd8deadSopenharmony_ci RESOLVED: Yes. For GLSL shaders, it is sufficient to reference the 14615bd8deadSopenharmony_ci built-in varying "gl_Layer". For assembly geometry programs, the 14625bd8deadSopenharmony_ci original version of the spec did not provide an enum allowing you to 14635bd8deadSopenharmony_ci name "result.layer" in TransformFeedbackAttribsNV. This was an 14645bd8deadSopenharmony_ci oversight in the original spec, which was fixed by version 14. An 14655bd8deadSopenharmony_ci updated driver will be required to take advantage of this capability; 14665bd8deadSopenharmony_ci NVIDIA drivers supporting this extension published prior to February 14675bd8deadSopenharmony_ci 2008 will not be able to capture "result.layer". The value captured for 14685bd8deadSopenharmony_ci LAYER_NV will be undefined unless a geometry program that writes 14695bd8deadSopenharmony_ci "result.layer" is active. 14705bd8deadSopenharmony_ci 14715bd8deadSopenharmony_ciRevision History 14725bd8deadSopenharmony_ci 14735bd8deadSopenharmony_ci Rev. Date Author Changes 14745bd8deadSopenharmony_ci ---- -------- -------- ----------------------------------------- 14755bd8deadSopenharmony_ci 18 03/09/11 mjk Minor typo fixes. 14765bd8deadSopenharmony_ci 14775bd8deadSopenharmony_ci 17 01/28/11 pbrown Change return value for start/size queries 14785bd8deadSopenharmony_ci when no buffer bound from -1 to zero, to 14795bd8deadSopenharmony_ci match state tables (Bug 7318), as done by 14805bd8deadSopenharmony_ci Jon Leech in related EXT/ARB extensions and 14815bd8deadSopenharmony_ci the core API specification. 14825bd8deadSopenharmony_ci 14835bd8deadSopenharmony_ci 16 08/17/08 pbrown Remove a non-existent function from the 14845bd8deadSopenharmony_ci set of functions that can generate invalid 14855bd8deadSopenharmony_ci operation errors while XFB is active. 14865bd8deadSopenharmony_ci 14875bd8deadSopenharmony_ci 15 02/20/08 pbrown Fix incorrect minimum for MAX_TRANSFORM_ 14885bd8deadSopenharmony_ci FEEDBACK_SEPARATE_COMPONENTS_NV. Should be 14895bd8deadSopenharmony_ci 4, not 16. 14905bd8deadSopenharmony_ci 14915bd8deadSopenharmony_ci 14 02/04/08 pbrown Fixed a problem with the spec where we were 14925bd8deadSopenharmony_ci unable to record "result.layer" using the 14935bd8deadSopenharmony_ci assembly interface. Added a new enum to 14945bd8deadSopenharmony_ci address. 14955bd8deadSopenharmony_ci 14965bd8deadSopenharmony_ci 13 11/28/07 pbrown Specified the captured primitive ID to be 14975bd8deadSopenharmony_ci undefined unless a geometry shader emits it 14985bd8deadSopenharmony_ci as a vertex output. XFB can only record 14995bd8deadSopenharmony_ci per-vertex data. 15005bd8deadSopenharmony_ci 15015bd8deadSopenharmony_ci 12 09/27/07 pbrown Removed incorrect error description from 15025bd8deadSopenharmony_ci the errors section -- buffer objects don't 15035bd8deadSopenharmony_ci need to be bound before calling Transform- 15045bd8deadSopenharmony_ci Feedback{Attribs,Varyings}NV, just before 15055bd8deadSopenharmony_ci BeginTransformFeedbackNV. 15065bd8deadSopenharmony_ci 15075bd8deadSopenharmony_ci 11 08/28/07 pbrown Added an error calling BeginTransformFeedback 15085bd8deadSopenharmony_ci if no attributes would be captured (i.e., 15095bd8deadSopenharmony_ci attribute count is 0 for ASM or no attributes 15105bd8deadSopenharmony_ci specified in the active GLSL program). 15115bd8deadSopenharmony_ci 15125bd8deadSopenharmony_ci 10 02/09/07 pbrown Updated status section (now released). 15135bd8deadSopenharmony_ci 15145bd8deadSopenharmony_ci 9 10/23/06 pbrown Fixed prototype for GetIntegerIndexedEXT and 15155bd8deadSopenharmony_ci GetBooleanIndexedEXT: <index> is unsigned. 15165bd8deadSopenharmony_ci 15175bd8deadSopenharmony_ci 8 10/19/06 pbrown Removed stray addition of GetFloatIndexedvEXT 15185bd8deadSopenharmony_ci and GetDoubleIndexedvEXT. Minor wording 15195bd8deadSopenharmony_ci fixes. 15205bd8deadSopenharmony_ci 15215bd8deadSopenharmony_ci 7 10/17/06 pbrown Rename from EXT to NV while working on 15225bd8deadSopenharmony_ci standardizing a functional subset extension 15235bd8deadSopenharmony_ci that will be named EXT_transform_feedback. We 15245bd8deadSopenharmony_ci expect that the EXT should be equivalent to 15255bd8deadSopenharmony_ci the NV, except that it (a) removes support for 15265bd8deadSopenharmony_ci non-GLSL usage, (b) removes the ability to 15275bd8deadSopenharmony_ci change the set of varyings captured without 15285bd8deadSopenharmony_ci relinking. NVIDIA expects to support both the 15295bd8deadSopenharmony_ci NV and EXT forms of this extension going 15305bd8deadSopenharmony_ci forward. Fix state table formatting. Removed 15315bd8deadSopenharmony_ci GetFloatIndexedvEXT and GetDoubleIndexedvEXT, 15325bd8deadSopenharmony_ci which are not needed by this and related 15335bd8deadSopenharmony_ci extensions. 15345bd8deadSopenharmony_ci 15355bd8deadSopenharmony_ci 6 09/11/06 pbrown Fix bad prototype for GetActiveVaryingEXT 15365bd8deadSopenharmony_ci and bad references to "GetActiveVaryingsEXT". 15375bd8deadSopenharmony_ci Fix enum names for INTERLEAVED_ATTRIBS_EXT and 15385bd8deadSopenharmony_ci SEPARATE_ATTRIBS_EXT (no TRANSFORM_ FEEDBACK 15395bd8deadSopenharmony_ci prefix). Remove erroneous state table entries 15405bd8deadSopenharmony_ci that were obsoleted by the introduction of the 15415bd8deadSopenharmony_ci TRANSFORM_FEEDBACK_RECORD_EXT query. 15425bd8deadSopenharmony_ci 15435bd8deadSopenharmony_ci 5 08/31/06 pbrown Fix miscellaneous spec errata. Record enum 15445bd8deadSopenharmony_ci values that weren't documented in previous 15455bd8deadSopenharmony_ci spec versions. Use correct function names for 15465bd8deadSopenharmony_ci indexed "Get" functions. Clarify that GLSL 15475bd8deadSopenharmony_ci interactions mean that some functions and 15485bd8deadSopenharmony_ci enums defined here aren't supported if GLSL 15495bd8deadSopenharmony_ci isn't supported. Fixed the double-assignment 15505bd8deadSopenharmony_ci of several TransformFeedbackAttribsEXT enums 15515bd8deadSopenharmony_ci and re-packed that portion of the enum range. 15525bd8deadSopenharmony_ci Clarify that several new functions are 15535bd8deadSopenharmony_ci non-listable. Fix the query tokens for buffer 15545bd8deadSopenharmony_ci object range bindings to match the API 15555bd8deadSopenharmony_ci (start/size, not start/end). 15565bd8deadSopenharmony_ci 15575bd8deadSopenharmony_ci 4 08/30/06 pbrown Reformatting as a plaintext document 15585bd8deadSopenharmony_ci instead of an exported MS Word document. 15595bd8deadSopenharmony_ci 15605bd8deadSopenharmony_ci 3 07/26/06 barthold Forgot a few changes w.r.t. version 2. 15615bd8deadSopenharmony_ci 15625bd8deadSopenharmony_ci 2 07/14/06 barthold Change BindBufferRangeEXT to take an 15635bd8deadSopenharmony_ci offset and size parameter. Change 15645bd8deadSopenharmony_ci BindBufferOffsetEXT to take an offset 15655bd8deadSopenharmony_ci parameter. 15665bd8deadSopenharmony_ci 15675bd8deadSopenharmony_ci 1 barthold Internal spec development. 1568