コード例 #1
0
void MetricBackend_INTEL_perfquery::freeQuery(unsigned event) {
    GLuint size;
    GLuint bWritten;
    glGetPerfQueryInfoINTEL(curQueryMetrics->first, 0, nullptr, &size,
                            nullptr, nullptr, nullptr);
    unsigned char* data = collector.newDataBuffer(event, size);

    glFlush();
    glGetPerfQueryDataINTEL(curQuery, GL_PERFQUERY_WAIT_INTEL, size, data, &bWritten);
    // bWritten != size -> should generate error TODO
}
コード例 #2
0
void
MetricBackend_INTEL_perfquery::enumMetrics(unsigned group,
                                           enumMetricsCallback callback,
                                           void* userData)
{
    unsigned numMetrics;
    glGetPerfQueryInfoINTEL(group, 0, nullptr, nullptr, &numMetrics, nullptr, nullptr);
    for (int i = 1; i <= numMetrics; i++) {
        Metric_INTEL_perfquery metric = Metric_INTEL_perfquery(group, i);
        callback(&metric, 0, userData);
    }
}
コード例 #3
0
int MetricBackend_INTEL_perfquery::enableMetric(Metric* metric_, QueryBoundary pollingRule) {
    if (pollingRule == QUERY_BOUNDARY_CALL) return 1;
    unsigned id = metric_->id();
    unsigned gid = metric_->groupId();
    unsigned numCounters;

    /* check that counter id is in valid range and group exists */
    glGetError();
    glGetPerfQueryInfoINTEL(gid, 0, nullptr, nullptr, &numCounters, nullptr, nullptr);
    GLenum err = glGetError();
    if (gid >= numCounters || err == GL_INVALID_VALUE) {
        return 1;
    }

    Metric_INTEL_perfquery metric(gid, id);
    metric.offset(); // triggers metric vars precache (in case context changes)
    passes[pollingRule][gid].push_back(metric);
    return 0;
}
コード例 #4
0
std::string MetricBackend_INTEL_perfquery::getGroupName(unsigned group) {
    char name[INTEL_NAME_LENGTH];
    glGetPerfQueryInfoINTEL(group, INTEL_NAME_LENGTH, name, nullptr,
                            nullptr, nullptr, nullptr);
    return std::string(name);
}
コード例 #5
0
	bool initPerf()
	{
		GLint QueryNameMaxLength = 0;
		glGetIntegerv(GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL, &QueryNameMaxLength);
		GLint CounterNameMaxLength = 0;
		glGetIntegerv(GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL, &CounterNameMaxLength);
		GLint CounterDescMaxLength = 0;
		glGetIntegerv(GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL, &CounterDescMaxLength);

		const GLuint queryNameLen = 1024;
		GLchar queryName[queryNameLen];

		const GLuint counterNameLen = 1024;
		GLchar counterName[counterNameLen];

		const GLuint counterDescLen = 4096;
		GLchar counterDesc[counterDescLen];

		GLuint queryId;
		glGetFirstPerfQueryIdINTEL(&queryId);

		while(queryId)
		{
			GLuint dataSize = 0;
			GLuint noCounters = 0;
			GLuint noInstances = 0;
			GLuint capsMask = 0;

			memset(queryName, 0, sizeof(queryName));

			glGetPerfQueryInfoINTEL(
				queryId,
				QueryNameMaxLength,
				queryName,
				&dataSize,
				&noCounters,
				&noInstances,
				&capsMask);

			printf("%d - %s (%s)/ output size: %d, counters: %d, instances: %d\n", queryId, queryName, capsMask & GL_PERFQUERY_GLOBAL_CONTEXT_INTEL ? "global" : "local", dataSize, noCounters, noInstances);

			glGetNextPerfQueryIdINTEL(queryId, &queryId);

			for(GLuint counterId = 1; counterId <= noCounters; counterId++)
			{
				GLuint counterOffset = 0;
				GLuint counterDataSize = 0;
				GLuint counterTypeEnum = 0;
				GLuint counterDataTypeEnum = 0;
				GLuint64 rawCounterMaxValue = 0;

				memset(counterName, 0, sizeof(counterName));
				memset(counterDesc, 0, sizeof(counterDesc));

				glGetPerfCounterInfoINTEL(
					queryId,
					counterId,
					CounterNameMaxLength,
					counterName,
					CounterDescMaxLength,
					counterDesc,
					&counterOffset,
					&counterDataSize,
					&counterTypeEnum,
					&counterDataTypeEnum,
					&rawCounterMaxValue);

				printf("- %d - %s output: %s - %s - %d, max counter values: %lld\n", counterId, counterName, GetCounterTypeString(counterTypeEnum), GetCounterDataTypeString(counterDataTypeEnum), dataSize, rawCounterMaxValue);
				printf("\t%s\n", counterDesc);

				continue;
			}
		}

		return true;
	}