[Mesa-dev] [PATCH] mesa: Add core support for the GL_INTEL_performance_query extension.
Ian Romanick
idr at freedesktop.org
Fri Apr 18 14:07:37 PDT 2014
On 04/03/2014 02:20 AM, Petri Latvala wrote:
> Like AMD_performance_monitor, this extension provides an interface for
> applications (and OpenGL-based tools) to access GPU performance
> counters. Since the exact performance counters available vary between
> vendors and hardware generations, the extension provides an API the
> application can use to get the names, types, and minimum/maximum
> values of all available counters.
>
> Applications create performance queries based on available query
> types, and begin/end measurement collection. Multiple queries can be
> measuring simultaneously.
>
> v2: Whitespace changes.
> v3: src/mapi/glapi/gen/gl_API.xml: Also expose the functions to GLES2.
>
> Signed-off-by: Petri Latvala <petri.latvala at intel.com>
There are a few nits below and one substantive change for
INTEL_performance_query.xml. With those fixed, this patch is
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> src/mapi/glapi/gen/INTEL_performance_query.xml | 93 ++++++++++++
> src/mapi/glapi/gen/Makefile.am | 1 +
> src/mapi/glapi/gen/gl_API.xml | 2 +
> src/mesa/main/config.h | 8 +
> src/mesa/main/extensions.c | 1 +
> src/mesa/main/get.c | 1 +
> src/mesa/main/get_hash_params.py | 6 +
> src/mesa/main/mtypes.h | 1 +
> src/mesa/main/performance_monitor.c | 195 +++++++++++++++++++++++++
> src/mesa/main/performance_monitor.h | 43 +++++-
> src/mesa/main/tests/dispatch_sanity.cpp | 12 ++
> 11 files changed, 362 insertions(+), 1 deletion(-)
> create mode 100644 src/mapi/glapi/gen/INTEL_performance_query.xml
>
> diff --git a/src/mapi/glapi/gen/INTEL_performance_query.xml b/src/mapi/glapi/gen/INTEL_performance_query.xml
> new file mode 100644
> index 0000000..0f4d687
> --- /dev/null
> +++ b/src/mapi/glapi/gen/INTEL_performance_query.xml
> @@ -0,0 +1,93 @@
> +<?xml version="1.0"?>
> +<!DOCTYPE OpenGLAPI SYSTEM "gl_API.dtd">
> +
> +<OpenGLAPI>
> +
> +<category name="GL_INTEL_performance_query" number="443">
> +
> + <function name="GetFirstPerfQueryIdINTEL" offset="assign" es2="2.0">
These should also all have static_dispatch="false". This prevents the
functions from being statically exposed by libGL or libGLES_v2.
Instead, applications have to use glXGetProcAddress or
eglGetProcAddress.
> + <param name="queryId" type="GLuint *"/>
> + </function>
> +
> + <function name="GetNextPerfQueryIdINTEL" offset="assign" es2="2.0">
> + <param name="queryId" type="GLuint"/>
> + <param name="nextQueryId" type="GLuint *"/>
> + </function>
> +
> + <function name="GetPerfQueryIdByNameINTEL" offset="assign" es2="2.0">
> + <param name="queryName" type="GLchar *"/>
> + <param name="queryId" type="GLuint *"/>
> + </function>
> +
> + <function name="GetPerfQueryInfoINTEL" offset="assign" es2="2.0">
> + <param name="queryId" type="GLuint"/>
> + <param name="queryNameLength" type="GLuint"/>
> + <param name="queryName" type="GLchar *"/>
> + <param name="dataSize" type="GLuint *"/>
> + <param name="noCounters" type="GLuint *"/>
> + <param name="noInstances" type="GLuint *"/>
> + <param name="capsMask" type="GLuint *"/>
> + </function>
> +
> + <function name="GetPerfCounterInfoINTEL" offset="assign" es2="2.0">
> + <param name="queryId" type="GLuint"/>
> + <param name="counterId" type="GLuint"/>
> + <param name="counterNameLength" type="GLuint"/>
> + <param name="counterName" type="GLchar *"/>
> + <param name="counterDescLength" type="GLuint"/>
> + <param name="counterDesc" type="GLchar *"/>
> + <param name="counterOffset" type="GLuint *"/>
> + <param name="counterDataSize" type="GLuint *"/>
> + <param name="counterTypeEnum" type="GLuint *"/>
> + <param name="counterDataTypeEnum" type="GLuint *"/>
> + <param name="rawCounterMaxValue" type="GLuint64 *"/>
> + </function>
> +
> + <function name="CreatePerfQueryINTEL" offset="assign" es2="2.0">
> + <param name="queryId" type="GLuint"/>
> + <param name="queryHandle" type="GLuint *"/>
> + </function>
> +
> + <function name="DeletePerfQueryINTEL" offset="assign" es2="2.0">
> + <param name="queryHandle" type="GLuint"/>
> + </function>
> +
> + <function name="BeginPerfQueryINTEL" offset="assign" es2="2.0">
> + <param name="queryHandle" type="GLuint"/>
> + </function>
> +
> + <function name="EndPerfQueryINTEL" offset="assign" es2="2.0">
> + <param name="queryHandle" type="GLuint"/>
> + </function>
> +
> + <function name="GetPerfQueryDataINTEL" offset="assign" es2="2.0">
> + <param name="queryHandle" type="GLuint"/>
> + <param name="flags" type="GLuint"/>
> + <param name="dataSize" type="GLsizei"/>
> + <param name="data" type="GLvoid *"/>
> + <param name="bytesWritten" type="GLuint *"/>
> + </function>
> +
> + <enum name="PERFQUERY_SINGLE_CONTEXT_INTEL" value="0x0000"/>
> + <enum name="PERFQUERY_GLOBAL_CONTEXT_INTEL" value="0x0001"/>
> + <enum name="PERFQUERY_WAIT_INTEL" value="0x83FB"/>
> + <enum name="PERFQUERY_FLUSH_INTEL" value="0x83FA"/>
> + <enum name="PERFQUERY_DONOT_FLUSH_INTEL" value="0x83F9"/>
> + <enum name="PERFQUERY_COUNTER_EVENT_INTEL" value="0x94F0"/>
> + <enum name="PERFQUERY_COUNTER_DURATION_NORM_INTEL" value="0x94F1"/>
> + <enum name="PERFQUERY_COUNTER_DURATION_RAW_INTEL" value="0x94F2"/>
> + <enum name="PERFQUERY_COUNTER_THROUGHPUT_INTEL" value="0x94F3"/>
> + <enum name="PERFQUERY_COUNTER_RAW_INTEL" value="0x94F4"/>
> + <enum name="PERFQUERY_COUNTER_TIMESTAMP_INTEL" value="0x94F5"/>
> + <enum name="PERFQUERY_COUNTER_DATA_UINT32_INTEL" value="0x94F8"/>
> + <enum name="PERFQUERY_COUNTER_DATA_UINT64_INTEL" value="0x94F9"/>
> + <enum name="PERFQUERY_COUNTER_DATA_FLOAT_INTEL" value="0x94FA"/>
> + <enum name="PERFQUERY_COUNTER_DATA_DOUBLE_INTEL" value="0x94FB"/>
> + <enum name="PERFQUERY_COUNTER_DATA_BOOL32_INTEL" value="0x94FC"/>
> + <enum name="PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL" value="0x94FD"/>
> + <enum name="PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL" value="0x94FE"/>
> + <enum name="PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL" value="0x94FF"/>
> + <enum name="PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL" value="0x9500"/>
> +</category>
> +
> +</OpenGLAPI>
> diff --git a/src/mapi/glapi/gen/Makefile.am b/src/mapi/glapi/gen/Makefile.am
> index 7b3c118..1c5b61c 100644
> --- a/src/mapi/glapi/gen/Makefile.am
> +++ b/src/mapi/glapi/gen/Makefile.am
> @@ -147,6 +147,7 @@ API_XML = \
> EXT_texture_array.xml \
> EXT_texture_integer.xml \
> EXT_transform_feedback.xml \
> + INTEL_performance_query.xml \
> NV_conditional_render.xml \
> NV_primitive_restart.xml \
> NV_texture_barrier.xml \
> diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
> index 9129d57..8fbf700 100644
> --- a/src/mapi/glapi/gen/gl_API.xml
> +++ b/src/mapi/glapi/gen/gl_API.xml
> @@ -12840,6 +12840,8 @@
> <enum name="SKIP_DECODE_EXT" value="0x8A4A"/>
> </category>
>
> +<xi:include href="INTEL_performance_query.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
> +
> <!-- Unnumbered extensions sorted by name. -->
>
> <category name="GL_ATI_blend_equation_separate">
> diff --git a/src/mesa/main/config.h b/src/mesa/main/config.h
> index 30da5d4..c96502a 100644
> --- a/src/mesa/main/config.h
> +++ b/src/mesa/main/config.h
> @@ -281,6 +281,14 @@
> #define MAX_VERTEX_STREAMS 4
> /*@}*/
>
> +/** For GL_INTEL_performance_query */
> +/*@{*/
> +#define MAX_PERFQUERY_QUERY_NAME_LENGTH 256
> +#define MAX_PERFQUERY_COUNTER_NAME_LENGTH 256
> +#define MAX_PERFQUERY_COUNTER_DESC_LENGTH 1024
> +#define PERFQUERY_HAVE_GPA_EXTENDED_COUNTERS 0
> +/*@}*/
> +
> /*
> * Color channel component order
> *
> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
> index a72284c..e8f125d 100644
> --- a/src/mesa/main/extensions.c
> +++ b/src/mesa/main/extensions.c
> @@ -330,6 +330,7 @@ static const struct extension extension_table[] = {
> { "GL_IBM_rasterpos_clip", o(dummy_true), GLL, 1996 },
> { "GL_IBM_texture_mirrored_repeat", o(dummy_true), GLL, 1998 },
> { "GL_INGR_blend_func_separate", o(EXT_blend_func_separate), GLL, 1999 },
> + { "GL_INTEL_performance_query", o(INTEL_performance_query), GL | ES2, 2013 },
The ES2 should line up with the other ES2s.
> { "GL_MESA_pack_invert", o(MESA_pack_invert), GL, 2002 },
> { "GL_MESA_texture_signed_rgba", o(EXT_texture_snorm), GL, 2009 },
> { "GL_MESA_window_pos", o(dummy_true), GLL, 2000 },
> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
> index 88cf202..8c4ac08 100644
> --- a/src/mesa/main/get.c
> +++ b/src/mesa/main/get.c
> @@ -394,6 +394,7 @@ EXTRA_EXT(ARB_viewport_array);
> EXTRA_EXT(ARB_compute_shader);
> EXTRA_EXT(ARB_gpu_shader5);
> EXTRA_EXT2(ARB_transform_feedback3, ARB_gpu_shader5);
> +EXTRA_EXT(INTEL_performance_query);
>
> static const int
> extra_ARB_color_buffer_float_or_glcore[] = {
> diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
> index 674d003..4c0838e 100644
> --- a/src/mesa/main/get_hash_params.py
> +++ b/src/mesa/main/get_hash_params.py
> @@ -311,6 +311,12 @@ descriptor=[
> # GL_ARB_get_program_binary / GL_OES_get_program_binary
> [ "NUM_PROGRAM_BINARY_FORMATS", "CONST(0), NO_EXTRA" ],
> [ "PROGRAM_BINARY_FORMATS", "LOC_CUSTOM, TYPE_INVALID, 0, NO_EXTRA" ],
> +
> +# GL_INTEL_performance_query
> + [ "PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL", "CONST(MAX_PERFQUERY_QUERY_NAME_LENGTH), extra_INTEL_performance_query" ],
> + [ "PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL", "CONST(MAX_PERFQUERY_COUNTER_NAME_LENGTH), extra_INTEL_performance_query" ],
> + [ "PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL", "CONST(MAX_PERFQUERY_COUNTER_DESC_LENGTH), extra_INTEL_performance_query" ],
> + [ "PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL", "CONST(PERFQUERY_HAVE_GPA_EXTENDED_COUNTERS), extra_INTEL_performance_query" ],
> ]},
>
> # GLES3 is not a typo.
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index c6d90c5..aa39f79 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -3598,6 +3598,7 @@ struct gl_extensions
> GLboolean ATI_texture_env_combine3;
> GLboolean ATI_fragment_shader;
> GLboolean ATI_separate_stencil;
> + GLboolean INTEL_performance_query;
> GLboolean MESA_pack_invert;
> GLboolean MESA_ycbcr_texture;
> GLboolean NV_conditional_render;
> diff --git a/src/mesa/main/performance_monitor.c b/src/mesa/main/performance_monitor.c
> index e62f770..dd22fef 100644
> --- a/src/mesa/main/performance_monitor.c
> +++ b/src/mesa/main/performance_monitor.c
> @@ -639,3 +639,198 @@ _mesa_perf_monitor_counter_size(const struct gl_perf_monitor_counter *c)
> return 0;
> }
> }
> +
> +extern void GLAPIENTRY
> +_mesa_GetFirstPerfQueryIdINTEL(GLuint *queryId)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If queryId pointer is equal to 0, INVALID_VALUE error is generated."
> + */
These all should be formatted like other spec references in Mesa:
/* The GL_INTEL_performance_query spec says:
*
* "If queryId pointer is equal to 0, INVALID_VALUE error is generated."
*/
> + if (!queryId) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetFirstPerfQueryIdINTEL(queryId == NULL)");
> + return;
> + }
> +
> + /* "If the given hardware platform doesn't support any performance queries,
> + * then the value of 0 is returned and INVALID_OPERATION error is raised."
> + */
> +
> + *queryId = 0;
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glGetFirstPerfQueryIdINTEL(no queries supported)");
> +}
> +
> +extern void GLAPIENTRY
> +_mesa_GetNextPerfQueryIdINTEL(GLuint queryId, GLuint *nextQueryId)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If nextQueryId pointer is equal to 0, an INVALID_VALUE error is
> + * generated."
> + */
> + if (!nextQueryId) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetNextPerfQueryIdINTEL(nextQueryId == NULL)");
> + return;
> + }
> +
> + /* "If the specified performance
> + * query identifier is invalid then INVALID_VALUE error is generated."
> + *
> + * No queries are supported, so all queries are invalid.
> + *
> + * "Whenever error is generated, the value of 0 is returned."
> + */
> + *nextQueryId = 0;
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetNextPerfQueryIdINTEL(invalid query)");
> +}
> +
> +extern void GLAPIENTRY
> +_mesa_GetPerfQueryIdByNameINTEL(char *queryName, GLuint *queryId)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If queryName does not reference a valid query name, an INVALID_VALUE
> + * error is generated."
> + *
> + * No queries are supported, so all query names are invalid.
> + */
> +
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetPerfQueryIdByNameINTEL(invalid query name)");
> +}
> +
> +extern void GLAPIENTRY
> +_mesa_GetPerfQueryInfoINTEL(GLuint queryId,
> + GLuint queryNameLength, char *queryName,
> + GLuint *dataSize, GLuint *noCounters,
> + GLuint *noActiveInstances,
> + GLuint *capsMask)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If queryId does not reference a valid query type, an INVALID_VALUE
> + * error is generated."
> + *
> + * No queries are supported, so all queries are invalid.
> + */
> +
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetPerfQueryInfoINTEL(invalid query)");
> +}
> +
> +extern void GLAPIENTRY
> +_mesa_GetPerfCounterInfoINTEL(GLuint queryId, GLuint counterId,
> + GLuint counterNameLength, char *counterName,
> + GLuint counterDescLength, char *counterDesc,
> + GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum,
> + GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If the pair of queryId and counterId does not reference a valid counter,
> + * an INVALID_VALUE error is generated."
> + *
> + * No queries are supported, so all queries are invalid.
> + */
> +
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetPerfCounterInfoINTEL(invalid counterId)");
> +}
> +
> +extern void GLAPIENTRY
> +_mesa_CreatePerfQueryINTEL(GLuint queryId, GLuint *queryHandle)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If queryId does not reference a valid query type,
> + * an INVALID_VALUE error is generated."
> + *
> + * No queries are supported, so all queries are invalid.
> + */
> +
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glCreatePerfQueryINTEL(invalid queryId)");
> +}
> +
> +extern void GLAPIENTRY
> +_mesa_DeletePerfQueryINTEL(GLuint queryHandle)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If a query handle doesn't reference a previously created performance
> + * query instance, an INVALID_VALUE error is generated."
> + *
> + * No queries are supported, so all queries are invalid.
> + */
> +
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glDeletePerfQueryINTEL(invalid queryHandle)");
> +}
> +
> +extern void GLAPIENTRY
> +_mesa_BeginPerfQueryINTEL(GLuint queryHandle)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If a query handle doesn't reference a previously created performance
> + * query instance, an INVALID_VALUE error is generated."
> + *
> + * No queries are supported, so all queries are invalid.
> + */
> +
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glBeginPerfQueryINTEL(invalid queryHandle)");
> +}
> +
> +extern void GLAPIENTRY
> +_mesa_EndPerfQueryINTEL(GLuint queryHandle)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If a performance query is not currently started, an INVALID_OPERATION
> + * error will be generated."
> + *
> + * The specification doesn't state that an invalid handle would be an
> + * INVALID_VALUE error. Regardless, query for such a handle will not be
> + * started, so we generate an INVALID_OPERATION in that case.
> + *
> + * No queries are supported, so all handles are invalid.
> + */
> +
> + _mesa_error(ctx, GL_INVALID_OPERATION,
> + "glEndPerfQueryINTEL(query not started)");
> +}
> +
> +extern void GLAPIENTRY
> +_mesa_GetPerfQueryDataINTEL(GLuint queryHandle, GLuint flags,
> + GLsizei dataSize, void *data, GLuint *bytesWritten)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* "If bytesWritten or data pointers are NULL then an INVALID_VALUE error
> + * is generated."
> + */
> + if (!bytesWritten || !data) {
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetPerfQueryDataINTEL(bytesWritten or data is NULL)");
> + return;
> + }
> +
> + /* The specification doesn't state that an invalid handle generates an
> + * error. We could interpret that to mean the case should be handled as
> + * "measurement not ready for this query", but what should be done if
> + * `flags' equals PERFQUERY_WAIT_INTEL?
> + *
> + * To resolve this, we just generate an INVALID_VALUE from an invalid query
> + * handle.
> + *
> + * No queries are supported, so all handles are invalid.
> + */
> +
> + _mesa_error(ctx, GL_INVALID_VALUE,
> + "glGetPerfQueryDataINTEL(invalid queryHandle)");
> +}
> diff --git a/src/mesa/main/performance_monitor.h b/src/mesa/main/performance_monitor.h
> index 76234e5..7b311e4 100644
> --- a/src/mesa/main/performance_monitor.h
> +++ b/src/mesa/main/performance_monitor.h
> @@ -23,7 +23,8 @@
>
> /**
> * \file performance_monitor.h
> - * Core Mesa support for the AMD_performance_monitor extension.
> + * Core Mesa support for the AMD_performance_monitor extension and the
> + * INTEL_performance_query extension.
> */
>
> #pragma once
> @@ -85,4 +86,44 @@ _mesa_GetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname,
> unsigned
> _mesa_perf_monitor_counter_size(const struct gl_perf_monitor_counter *);
>
> +
> +extern void GLAPIENTRY
> +_mesa_GetFirstPerfQueryIdINTEL(GLuint *queryId);
> +
> +extern void GLAPIENTRY
> +_mesa_GetNextPerfQueryIdINTEL(GLuint queryId, GLuint *nextQueryId);
> +
> +extern void GLAPIENTRY
> +_mesa_GetPerfQueryIdByNameINTEL(char *queryName, GLuint *queryId);
> +
> +extern void GLAPIENTRY
> +_mesa_GetPerfQueryInfoINTEL(GLuint queryId,
> + GLuint queryNameLength, char *queryName,
> + GLuint *dataSize, GLuint *noCounters,
> + GLuint *noActiveInstances,
> + GLuint *capsMask);
> +
> +extern void GLAPIENTRY
> +_mesa_GetPerfCounterInfoINTEL(GLuint queryId, GLuint counterId,
> + GLuint counterNameLength, char *counterName,
> + GLuint counterDescLength, char *counterDesc,
> + GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum,
> + GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue);
> +
> +extern void GLAPIENTRY
> +_mesa_CreatePerfQueryINTEL(GLuint queryId, GLuint *queryHandle);
> +
> +extern void GLAPIENTRY
> +_mesa_DeletePerfQueryINTEL(GLuint queryHandle);
> +
> +extern void GLAPIENTRY
> +_mesa_BeginPerfQueryINTEL(GLuint queryHandle);
> +
> +extern void GLAPIENTRY
> +_mesa_EndPerfQueryINTEL(GLuint queryHandle);
> +
> +extern void GLAPIENTRY
> +_mesa_GetPerfQueryDataINTEL(GLuint queryHandle, GLuint flags,
> + GLsizei dataSize, void *data, GLuint *bytesWritten);
> +
> #endif
> diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp
> index 8ff975f..672302f 100644
> --- a/src/mesa/main/tests/dispatch_sanity.cpp
> +++ b/src/mesa/main/tests/dispatch_sanity.cpp
> @@ -912,6 +912,18 @@ const struct function gl_core_functions_possible[] = {
> { "glEndPerfMonitorAMD", 11, -1 },
> { "glGetPerfMonitorCounterDataAMD", 11, -1 },
>
> + /* GL_INTEL_performance_query */
> + { "glGetFirstPerfQueryIdINTEL", 30, -1 },
> + { "glGetNextPerfQueryIdINTEL", 30, -1 },
> + { "glGetPerfQueryIdByNameINTEL", 30, -1 },
> + { "glGetPerfQueryInfoINTEL", 30, -1 },
> + { "glGetPerfCounterInfoINTEL", 30, -1 },
> + { "glCreatePerfQueryINTEL", 30, -1 },
> + { "glDeletePerfQueryINTEL", 30, -1 },
> + { "glBeginPerfQueryINTEL", 30, -1 },
> + { "glEndPerfQueryINTEL", 30, -1 },
> + { "glGetPerfQueryDataINTEL", 30, -1 },
> +
> /* GL_NV_vdpau_interop */
> { "glVDPAUInitNV", 11, -1 },
> { "glVDPAUFiniNV", 11, -1 },
>
More information about the mesa-dev
mailing list