update glxinfo to mesa-demos 8.4.0
This commit is contained in:
parent
ff54d44d65
commit
5397eac377
@ -30,6 +30,18 @@
|
||||
#define snprintf _snprintf
|
||||
#endif
|
||||
|
||||
#ifndef GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
|
||||
#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001
|
||||
#endif
|
||||
#ifndef GL_CONTEXT_FLAG_DEBUG_BIT
|
||||
#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
|
||||
#endif
|
||||
#ifndef GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB
|
||||
#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004
|
||||
#endif
|
||||
#ifndef GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR
|
||||
#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Return the GL enum name for a numeric value.
|
||||
@ -289,9 +301,13 @@ build_core_profile_extension_list(const struct ext_functions *extfuncs)
|
||||
totalLen = 0;
|
||||
for (i = 0; i < n; i++) {
|
||||
const char *ext = (const char *) extfuncs->GetStringi(GL_EXTENSIONS, i);
|
||||
totalLen += strlen(ext) + 1; /* plus a space */
|
||||
if (ext)
|
||||
totalLen += strlen(ext) + 1; /* plus a space */
|
||||
}
|
||||
|
||||
if (!totalLen)
|
||||
return NULL;
|
||||
|
||||
buffer = malloc(totalLen + 1);
|
||||
if (buffer) {
|
||||
int pos = 0;
|
||||
@ -594,12 +610,145 @@ print_limits(const char *extensions, const char *oglstring, int version,
|
||||
{ 1, GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, "GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET", "GL_ARB_vertex_attrib_binding" },
|
||||
{ 1, GL_MAX_VERTEX_ATTRIB_BINDINGS, "GL_MAX_VERTEX_ATTRIB_BINDINGS", "GL_ARB_vertex_attrib_binding" },
|
||||
#endif
|
||||
#if defined(GL_ARB_tessellation_shader)
|
||||
{ 1, GL_MAX_TESS_GEN_LEVEL, "GL_MAX_TESS_GEN_LEVEL", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_PATCH_COMPONENTS, "GL_MAX_TESS_PATCH_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS, "GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS, "GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS, "GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_INPUT_COMPONENTS, "GL_MAX_TESS_CONTROL_INPUT_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS, "GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS, "GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS, "GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS, "GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS, "GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS, "GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS, "GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS, "GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
{ 1, GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS, "GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS", "GL_ARB_tessellation_shader" },
|
||||
#endif
|
||||
|
||||
#if defined(GL_VERSION_3_0)
|
||||
{ 1, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, "GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS", "3.0" },
|
||||
{ 1, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS", "3.0" },
|
||||
{ 1, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, "GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS", "3.0" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_3_1)
|
||||
{ 1, GL_MAX_TEXTURE_BUFFER_SIZE, "GL_MAX_TEXTURE_BUFFER_SIZE", "3.1" },
|
||||
{ 1, GL_MAX_RECTANGLE_TEXTURE_SIZE, "GL_MAX_RECTANGLE_TEXTURE_SIZE", "3.1" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_3_2)
|
||||
{ 1, GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS, "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS", "3.2" },
|
||||
{ 1, GL_MAX_GEOMETRY_UNIFORM_COMPONENTS, "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS", "3.2" },
|
||||
{ 1, GL_MAX_GEOMETRY_OUTPUT_VERTICES, "GL_MAX_GEOMETRY_OUTPUT_VERTICES", "3.2" },
|
||||
{ 1, GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, "GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS", "3.2" },
|
||||
{ 1, GL_MAX_VERTEX_OUTPUT_COMPONENTS, "GL_MAX_VERTEX_OUTPUT_COMPONENTS", "3.2" },
|
||||
{ 1, GL_MAX_GEOMETRY_INPUT_COMPONENTS, "GL_MAX_GEOMETRY_INPUT_COMPONENTS", "3.2" },
|
||||
{ 1, GL_MAX_GEOMETRY_OUTPUT_COMPONENTS, "GL_MAX_GEOMETRY_OUTPUT_COMPONENTS", "3.2" },
|
||||
{ 1, GL_MAX_FRAGMENT_INPUT_COMPONENTS, "GL_MAX_FRAGMENT_INPUT_COMPONENTS", "3.2" },
|
||||
{ 1, GL_MAX_SERVER_WAIT_TIMEOUT, "GL_MAX_SERVER_WAIT_TIMEOUT", "3.2" },
|
||||
{ 1, GL_MAX_SAMPLE_MASK_WORDS, "GL_MAX_SAMPLE_MASK_WORDS", "3.2" },
|
||||
{ 1, GL_MAX_COLOR_TEXTURE_SAMPLES, "GL_MAX_COLOR_TEXTURE_SAMPLES", "3.2" },
|
||||
{ 1, GL_MAX_DEPTH_TEXTURE_SAMPLES, "GL_MAX_DEPTH_TEXTURE_SAMPLES", "3.2" },
|
||||
{ 1, GL_MAX_INTEGER_SAMPLES, "GL_MAX_INTEGER_SAMPLES", "3.2" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_3_3)
|
||||
{ 1, GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, "GL_MAX_DUAL_SOURCE_DRAW_BUFFERS", "3.3" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_4_0)
|
||||
{ 1, GL_MAX_TRANSFORM_FEEDBACK_BUFFERS, "GL_MAX_TRANSFORM_FEEDBACK_BUFFERS", "4.0" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_4_1)
|
||||
{ 1, GL_MAX_VERTEX_UNIFORM_VECTORS, "GL_MAX_VERTEX_UNIFORM_VECTORS", "4.1" },
|
||||
{ 1, GL_MAX_VARYING_VECTORS, "GL_MAX_VARYING_VECTORS", "4.1" },
|
||||
{ 1, GL_MAX_FRAGMENT_UNIFORM_VECTORS, "GL_MAX_FRAGMENT_UNIFORM_VECTORS", "4.1" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_4_2)
|
||||
{ 1, GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS, "GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS", "4.2" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS, "GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS", "4.2" },
|
||||
{ 1, GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS, "GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS", "4.2" },
|
||||
{ 1, GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS, "GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS", "4.2" },
|
||||
{ 1, GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS, "GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS", "4.2" },
|
||||
{ 1, GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS, "GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS", "4.2" },
|
||||
{ 1, GL_MAX_VERTEX_ATOMIC_COUNTERS, "GL_MAX_VERTEX_ATOMIC_COUNTERS", "4.2" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS, "GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS", "4.2" },
|
||||
{ 1, GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS, "GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS", "4.2" },
|
||||
{ 1, GL_MAX_GEOMETRY_ATOMIC_COUNTERS, "GL_MAX_GEOMETRY_ATOMIC_COUNTERS", "4.2" },
|
||||
{ 1, GL_MAX_FRAGMENT_ATOMIC_COUNTERS, "GL_MAX_FRAGMENT_ATOMIC_COUNTERS", "4.2" },
|
||||
{ 1, GL_MAX_COMBINED_ATOMIC_COUNTERS, "GL_MAX_COMBINED_ATOMIC_COUNTERS", "4.2" },
|
||||
{ 1, GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE, "GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE", "4.2" },
|
||||
{ 1, GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS, "GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS", "4.2" },
|
||||
{ 1, GL_MAX_IMAGE_UNITS, "GL_MAX_IMAGE_UNITS", "4.2" },
|
||||
{ 1, GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS, "GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS", "4.2" },
|
||||
{ 1, GL_MAX_IMAGE_SAMPLES, "GL_MAX_IMAGE_SAMPLES", "4.2" },
|
||||
{ 1, GL_MAX_VERTEX_IMAGE_UNIFORMS , "GL_MAX_VERTEX_IMAGE_UNIFORMS", "4.2" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS, "GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS", "4.2" },
|
||||
{ 1, GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS, "GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS", "4.2" },
|
||||
{ 1, GL_MAX_GEOMETRY_IMAGE_UNIFORMS, "GL_MAX_GEOMETRY_IMAGE_UNIFORMS", "4.2" },
|
||||
{ 1, GL_MAX_FRAGMENT_IMAGE_UNIFORMS, "GL_MAX_FRAGMENT_IMAGE_UNIFORMS", "4.2" },
|
||||
{ 1, GL_MAX_COMBINED_IMAGE_UNIFORMS, "GL_MAX_COMBINED_IMAGE_UNIFORMS", "4.2" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_4_3)
|
||||
{ 1, GL_MAX_ELEMENT_INDEX, "GL_MAX_ELEMENT_INDEX", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_UNIFORM_BLOCKS, "GL_MAX_COMPUTE_UNIFORM_BLOCKS", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, "GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_IMAGE_UNIFORMS, "GL_MAX_COMPUTE_IMAGE_UNIFORMS", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_SHARED_MEMORY_SIZE, "GL_MAX_COMPUTE_SHARED_MEMORY_SIZE", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_UNIFORM_COMPONENTS, "GL_MAX_COMPUTE_UNIFORM_COMPONENTS", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, "GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_ATOMIC_COUNTERS, "GL_MAX_COMPUTE_ATOMIC_COUNTERS", "4.3" },
|
||||
{ 1, GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, "GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, "GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_WORK_GROUP_COUNT, "GL_MAX_COMPUTE_WORK_GROUP_COUNT", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_WORK_GROUP_SIZE, "GL_MAX_COMPUTE_WORK_GROUP_SIZE", "4.3" },
|
||||
{ 1, GL_MAX_DEBUG_MESSAGE_LENGTH, "GL_MAX_DEBUG_MESSAGE_LENGTH", "4.3" },
|
||||
{ 1, GL_MAX_DEBUG_LOGGED_MESSAGES, "GL_MAX_DEBUG_LOGGED_MESSAGES", "4.3" },
|
||||
{ 1, GL_MAX_DEBUG_GROUP_STACK_DEPTH, "GL_MAX_DEBUG_GROUP_STACK_DEPTH", "4.3" },
|
||||
{ 1, GL_MAX_LABEL_LENGTH, "GL_MAX_LABEL_LENGTH", "4.3" },
|
||||
{ 1, GL_MAX_UNIFORM_LOCATIONS, "GL_MAX_UNIFORM_LOCATIONS", "4.3" },
|
||||
{ 1, GL_MAX_FRAMEBUFFER_WIDTH, "GL_MAX_FRAMEBUFFER_WIDTH", "4.3" },
|
||||
{ 1, GL_MAX_FRAMEBUFFER_HEIGHT, "GL_MAX_FRAMEBUFFER_HEIGHT", "4.3" },
|
||||
{ 1, GL_MAX_FRAMEBUFFER_LAYERS, "GL_MAX_FRAMEBUFFER_LAYERS", "4.3" },
|
||||
{ 1, GL_MAX_FRAMEBUFFER_SAMPLES, "GL_MAX_FRAMEBUFFER_SAMPLES", "4.3" },
|
||||
{ 1, GL_MAX_WIDTH, "GL_MAX_WIDTH", "4.3" },
|
||||
{ 1, GL_MAX_HEIGHT, "GL_MAX_HEIGHT", "4.3" },
|
||||
{ 1, GL_MAX_DEPTH, "GL_MAX_DEPTH", "4.3" },
|
||||
{ 1, GL_MAX_LAYERS, "GL_MAX_LAYERS", "4.3" },
|
||||
{ 1, GL_MAX_COMBINED_DIMENSIONS, "GL_MAX_COMBINED_DIMENSIONS", "4.3" },
|
||||
{ 1, GL_MAX_NAME_LENGTH, "GL_MAX_NAME_LENGTH", "4.3" },
|
||||
{ 1, GL_MAX_NUM_ACTIVE_VARIABLES, "GL_MAX_NUM_ACTIVE_VARIABLES", "4.3" },
|
||||
{ 1, GL_MAX_NUM_COMPATIBLE_SUBROUTINES, "GL_MAX_NUM_COMPATIBLE_SUBROUTINES", "4.3" },
|
||||
{ 1, GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS", "4.3" },
|
||||
{ 1, GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS, "GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS", "4.3" },
|
||||
{ 1, GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS, "GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS", "4.3" },
|
||||
{ 1, GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS, "GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS", "4.3" },
|
||||
{ 1, GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS", "4.3" },
|
||||
{ 1, GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, "GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS", "4.3" },
|
||||
{ 1, GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, "GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS", "4.3" },
|
||||
{ 1, GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, "GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS", "4.3" },
|
||||
{ 1, GL_MAX_SHADER_STORAGE_BLOCK_SIZE, "GL_MAX_SHADER_STORAGE_BLOCK_SIZE", "4.3" },
|
||||
{ 1, GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES, "GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES", "4.3" },
|
||||
{ 1, GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, "GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET", "4.3" },
|
||||
{ 1, GL_MAX_VERTEX_ATTRIB_BINDINGS, "GL_MAX_VERTEX_ATTRIB_BINDINGS", "4.3" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_4_4)
|
||||
{ 1, GL_MAX_VERTEX_ATTRIB_STRIDE, "GL_MAX_VERTEX_ATTRIB_STRIDE", "4.4" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_4_5)
|
||||
{ 1, GL_MAX_CULL_DISTANCES, "GL_MAX_CULL_DISTANCES", "4.5" },
|
||||
{ 1, GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES, "GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES", "4.5" },
|
||||
#endif
|
||||
#if defined(GL_VERSION_4_6)
|
||||
{ 1, GL_MAX_TEXTURE_MAX_ANISOTROPY, "GL_MAX_TEXTURE_MAX_ANISOTROPY", "4.6" },
|
||||
#endif
|
||||
#if defined(GL_ARB_transform_feedback3)
|
||||
{ 1, GL_MAX_TRANSFORM_FEEDBACK_BUFFERS, "GL_MAX_TRANSFORM_FEEDBACK_BUFFERS", "GL_ARB_transform_feedback3" },
|
||||
{ 1, GL_MAX_VERTEX_STREAMS, "GL_MAX_VERTEX_STREAMS", "GL_ARB_transform_feedback3" },
|
||||
#endif
|
||||
{ 0, (GLenum) 0, NULL, NULL }
|
||||
};
|
||||
GLint i, max[2];
|
||||
const char *prev_ext = "none";
|
||||
|
||||
printf("%s limits:\n", oglstring);
|
||||
for (i = 0; limits[i].count; i++) {
|
||||
@ -608,10 +757,17 @@ print_limits(const char *extensions, const char *oglstring, int version,
|
||||
extension_supported(limits[i].extension, extensions)) {
|
||||
glGetIntegerv(limits[i].token, max);
|
||||
if (glGetError() == GL_NO_ERROR) {
|
||||
if (limits[i].count == 1)
|
||||
if (limits[i].extension && strcmp(limits[i].extension, prev_ext) != 0) {
|
||||
printf(" %s:\n", limits[i].extension);
|
||||
prev_ext = limits[i].extension;
|
||||
}
|
||||
if (limits[i].count == 1) {
|
||||
printf(" %s = %d\n", limits[i].name, max[0]);
|
||||
else /* XXX fix if we ever query something with more than 2 values */
|
||||
}
|
||||
else {
|
||||
assert(limits[i].count == 2);
|
||||
printf(" %s = %d, %d\n", limits[i].name, max[0], max[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -622,21 +778,37 @@ print_limits(const char *extensions, const char *oglstring, int version,
|
||||
GL_MAX_CONVOLUTION_WIDTH, max);
|
||||
extfuncs->GetConvolutionParameteriv(GL_CONVOLUTION_2D,
|
||||
GL_MAX_CONVOLUTION_HEIGHT, max+1);
|
||||
printf(" GL_ARB_imaging:\n");
|
||||
printf(" GL_MAX_CONVOLUTION_WIDTH/HEIGHT = %d, %d\n", max[0], max[1]);
|
||||
}
|
||||
|
||||
if (extension_supported("GL_ARB_texture_compression", extensions)) {
|
||||
GLint i, n;
|
||||
GLint *formats;
|
||||
printf(" GL_ARB_texture_compression:\n");
|
||||
glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &n);
|
||||
printf(" GL_NUM_COMPRESSED_TEXTURE_FORMATS = %d\n", n);
|
||||
formats = (GLint *) malloc(n * sizeof(GLint));
|
||||
glGetIntegerv(GL_COMPRESSED_TEXTURE_FORMATS, formats);
|
||||
for (i = 0; i < n; i++) {
|
||||
printf(" %s\n", enum_name(formats[i]));
|
||||
printf(" %s\n", enum_name(formats[i]));
|
||||
}
|
||||
free(formats);
|
||||
}
|
||||
|
||||
#if defined(GL_VERSION_4_3)
|
||||
if (version >= 43) {
|
||||
GLint i, n = 0;
|
||||
printf(" 4.3:\n");
|
||||
glGetIntegerv(GL_NUM_SHADING_LANGUAGE_VERSIONS, &n);
|
||||
printf(" GL_NUM_SHADING_LANGUAGE_VERSIONS = %d\n", n);
|
||||
for (i = 0; i < n; i++) {
|
||||
printf(" %s\n", (const char *)
|
||||
extfuncs->GetStringi(GL_SHADING_LANGUAGE_VERSION, i));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(GL_ARB_vertex_program)
|
||||
if (extension_supported("GL_ARB_vertex_program", extensions)) {
|
||||
print_program_limits(GL_VERTEX_PROGRAM_ARB, extfuncs);
|
||||
@ -711,12 +883,10 @@ const char *
|
||||
context_flags_string(int mask)
|
||||
{
|
||||
const static struct bit_info bits[] = {
|
||||
#ifdef GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT
|
||||
{ GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT, "forward-compatible" },
|
||||
#endif
|
||||
#ifdef GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB
|
||||
{ GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB, "robust-access" },
|
||||
#endif
|
||||
{ GL_CONTEXT_FLAG_DEBUG_BIT, "debug" },
|
||||
{ GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR, "no-error" },
|
||||
};
|
||||
|
||||
return bitmask_to_string(bits, ELEMENTS(bits), mask);
|
||||
@ -733,15 +903,15 @@ usage(void)
|
||||
printf("\t-display <dname>: Print GLX visuals on specified server.\n");
|
||||
printf("\t-i: Force an indirect rendering context.\n");
|
||||
#endif
|
||||
printf("\t-B: brief output, print only the basics.\n");
|
||||
printf("\t-v: Print visuals info in verbose form.\n");
|
||||
printf("\t-t: Print verbose table.\n");
|
||||
printf("\t-t: Print verbose visual information table.\n");
|
||||
printf("\t-h: This information.\n");
|
||||
printf("\t-b: Find the 'best' visual and print its number.\n");
|
||||
printf("\t-l: Print interesting OpenGL limits.\n");
|
||||
printf("\t-s: Print a single extension per line.\n");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
parse_args(int argc, char *argv[], struct options *options)
|
||||
{
|
||||
@ -771,6 +941,9 @@ parse_args(int argc, char *argv[], struct options *options)
|
||||
else if (strcmp(argv[i], "-v") == 0) {
|
||||
options->mode = Verbose;
|
||||
}
|
||||
else if (strcmp(argv[i], "-B") == 0) {
|
||||
options->mode = Brief;
|
||||
}
|
||||
else if (strcmp(argv[i], "-b") == 0) {
|
||||
options->findBest = GL_TRUE;
|
||||
}
|
||||
@ -791,3 +964,59 @@ parse_args(int argc, char *argv[], struct options *options)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
query_ATI_meminfo(void)
|
||||
{
|
||||
#ifdef GL_ATI_meminfo
|
||||
int i[4];
|
||||
|
||||
printf("Memory info (GL_ATI_meminfo):\n");
|
||||
|
||||
glGetIntegerv(GL_VBO_FREE_MEMORY_ATI, i);
|
||||
printf(" VBO free memory - total: %u MB, largest block: %u MB\n",
|
||||
i[0] / 1024, i[1] / 1024);
|
||||
printf(" VBO free aux. memory - total: %u MB, largest block: %u MB\n",
|
||||
i[2] / 1024, i[3] / 1024);
|
||||
|
||||
glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, i);
|
||||
printf(" Texture free memory - total: %u MB, largest block: %u MB\n",
|
||||
i[0] / 1024, i[1] / 1024);
|
||||
printf(" Texture free aux. memory - total: %u MB, largest block: %u MB\n",
|
||||
i[2] / 1024, i[3] / 1024);
|
||||
|
||||
glGetIntegerv(GL_RENDERBUFFER_FREE_MEMORY_ATI, i);
|
||||
printf(" Renderbuffer free memory - total: %u MB, largest block: %u MB\n",
|
||||
i[0] / 1024, i[1] / 1024);
|
||||
printf(" Renderbuffer free aux. memory - total: %u MB, largest block: %u MB\n",
|
||||
i[2] / 1024, i[3] / 1024);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
query_NVX_gpu_memory_info(void)
|
||||
{
|
||||
#ifdef GL_NVX_gpu_memory_info
|
||||
int i;
|
||||
|
||||
printf("Memory info (GL_NVX_gpu_memory_info):\n");
|
||||
|
||||
glGetIntegerv(GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &i);
|
||||
printf(" Dedicated video memory: %u MB\n", i / 1024);
|
||||
|
||||
glGetIntegerv(GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, &i);
|
||||
printf(" Total available memory: %u MB\n", i / 1024);
|
||||
|
||||
glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &i);
|
||||
printf(" Currently available dedicated video memory: %u MB\n", i / 1024);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
print_gpu_memory_info(const char *glExtensions)
|
||||
{
|
||||
if (strstr(glExtensions, "GL_ATI_meminfo"))
|
||||
query_ATI_meminfo();
|
||||
if (strstr(glExtensions, "GL_NVX_gpu_memory_info"))
|
||||
query_NVX_gpu_memory_info();
|
||||
}
|
||||
|
@ -67,7 +67,8 @@ typedef enum
|
||||
{
|
||||
Normal,
|
||||
Wide,
|
||||
Verbose
|
||||
Verbose,
|
||||
Brief
|
||||
} InfoMode;
|
||||
|
||||
|
||||
@ -85,6 +86,7 @@ struct options
|
||||
|
||||
/** list of known OpenGL versions */
|
||||
static const struct { int major, minor; } gl_versions[] = {
|
||||
{4, 6},
|
||||
{4, 5},
|
||||
{4, 4},
|
||||
{4, 3},
|
||||
@ -137,5 +139,7 @@ context_flags_string(int mask);
|
||||
void
|
||||
parse_args(int argc, char *argv[], struct options *options);
|
||||
|
||||
void
|
||||
print_gpu_memory_info(const char *glExtensions);
|
||||
|
||||
#endif /* GLINFO_COMMON_H */
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" $OpenBSD: glxinfo.1,v 1.3 2015/02/03 16:15:13 schwarze Exp $
|
||||
.\" $OpenBSD: glxinfo.1,v 1.4 2018/02/23 10:37:24 jsg Exp $
|
||||
.\" $TOG: xdpyinfo.man /main/22 1998/02/09 13:57:10 kaleb $
|
||||
.\" Copyright 1988, 1989, 1994, 1998 The Open Group
|
||||
.\"
|
||||
@ -26,7 +26,7 @@
|
||||
.\"
|
||||
.\" $XFree86: xc/programs/glxinfo/glxinfo.man,v 1.5 2001/12/14 20:00:47 dawes Exp $
|
||||
.\"
|
||||
.Dd $Mdocdate: February 3 2015 $
|
||||
.Dd $Mdocdate: February 23 2018 $
|
||||
.Dt GLXINFO 1
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -34,7 +34,7 @@
|
||||
.Nd display info about a GLX extension and OpenGL renderer
|
||||
.Sh SYNOPSIS
|
||||
.Nm glxinfo
|
||||
.Op Fl bhilstv
|
||||
.Op Fl Bbhilstv
|
||||
.Op Fl display Ar displayname
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
@ -47,6 +47,8 @@ buffered, the component sizes, Z-buffering depth, etc).
|
||||
.Pp
|
||||
Command line options include:
|
||||
.Bl -tag -width Ds
|
||||
.It Fl B
|
||||
Brief output mode, print only the basics.
|
||||
.It Fl b
|
||||
Find the 'best' visual and print its number.
|
||||
.It Fl h
|
||||
|
@ -26,6 +26,7 @@
|
||||
* -t print wide table
|
||||
* -v print verbose information
|
||||
* -display DisplayName specify the X display to interogate
|
||||
* -B brief, print only the basics
|
||||
* -b only print ID of "best" visual on screen 0
|
||||
* -i use indirect rendering connection only
|
||||
* -l print interesting OpenGL limits (added 5 Sep 2002)
|
||||
@ -390,9 +391,10 @@ query_renderer(void)
|
||||
|
||||
|
||||
static Bool
|
||||
print_screen_info(Display *dpy, int scrnum, Bool allowDirect,
|
||||
print_screen_info(Display *dpy, int scrnum,
|
||||
const struct options *opts,
|
||||
Bool coreProfile, Bool es2Profile, Bool limits,
|
||||
Bool singleLine, Bool coreWorked)
|
||||
Bool coreWorked)
|
||||
{
|
||||
Window win;
|
||||
XSetWindowAttributes attr;
|
||||
@ -413,8 +415,9 @@ print_screen_info(Display *dpy, int scrnum, Bool allowDirect,
|
||||
fbconfigs = choose_fb_config(dpy, scrnum);
|
||||
if (fbconfigs) {
|
||||
ctx = create_context_with_config(dpy, fbconfigs[0],
|
||||
coreProfile, es2Profile, allowDirect);
|
||||
if (!ctx && allowDirect && !coreProfile) {
|
||||
coreProfile, es2Profile,
|
||||
opts->allowDirect);
|
||||
if (!ctx && opts->allowDirect && !coreProfile) {
|
||||
/* try indirect */
|
||||
ctx = create_context_with_config(dpy, fbconfigs[0],
|
||||
coreProfile, es2Profile, False);
|
||||
@ -426,7 +429,7 @@ print_screen_info(Display *dpy, int scrnum, Bool allowDirect,
|
||||
else if (!coreProfile && !es2Profile) {
|
||||
visinfo = choose_xvisinfo(dpy, scrnum);
|
||||
if (visinfo)
|
||||
ctx = glXCreateContext(dpy, visinfo, NULL, allowDirect);
|
||||
ctx = glXCreateContext(dpy, visinfo, NULL, opts->allowDirect);
|
||||
} else
|
||||
visinfo = NULL;
|
||||
|
||||
@ -465,9 +468,9 @@ print_screen_info(Display *dpy, int scrnum, Bool allowDirect,
|
||||
const char *glVendor = (const char *) glGetString(GL_VENDOR);
|
||||
const char *glRenderer = (const char *) glGetString(GL_RENDERER);
|
||||
const char *glVersion = (const char *) glGetString(GL_VERSION);
|
||||
char *glExtensions;
|
||||
int glxVersionMajor;
|
||||
int glxVersionMinor;
|
||||
char *glExtensions = NULL;
|
||||
int glxVersionMajor = 0;
|
||||
int glxVersionMinor = 0;
|
||||
char *displayName = NULL;
|
||||
char *colon = NULL, *period = NULL;
|
||||
struct ext_functions extfuncs;
|
||||
@ -482,21 +485,21 @@ print_screen_info(Display *dpy, int scrnum, Bool allowDirect,
|
||||
extfuncs.GetConvolutionParameteriv = (GETCONVOLUTIONPARAMETERIVPROC)
|
||||
glXGetProcAddressARB((GLubyte *) "glGetConvolutionParameteriv");
|
||||
|
||||
/* Get list of GL extensions */
|
||||
if (coreProfile) {
|
||||
glExtensions = build_core_profile_extension_list(&extfuncs);
|
||||
if (!glXQueryVersion(dpy, & glxVersionMajor, & glxVersionMinor)) {
|
||||
fprintf(stderr, "Error: glXQueryVersion failed\n");
|
||||
exit(1);
|
||||
}
|
||||
else {
|
||||
|
||||
/* Get list of GL extensions */
|
||||
if (coreProfile && extfuncs.GetStringi)
|
||||
glExtensions = build_core_profile_extension_list(&extfuncs);
|
||||
if (!glExtensions) {
|
||||
coreProfile = False;
|
||||
glExtensions = (char *) glGetString(GL_EXTENSIONS);
|
||||
}
|
||||
|
||||
CheckError(__LINE__);
|
||||
|
||||
if (! glXQueryVersion( dpy, & glxVersionMajor, & glxVersionMinor )) {
|
||||
fprintf(stderr, "Error: glXQueryVersion failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!coreWorked) {
|
||||
/* Strip the screen number from the display name, if present. */
|
||||
if (!(displayName = (char *) malloc(strlen(DisplayString(dpy)) + 1))) {
|
||||
@ -518,7 +521,7 @@ print_screen_info(Display *dpy, int scrnum, Bool allowDirect,
|
||||
printf("Yes\n");
|
||||
}
|
||||
else {
|
||||
if (!allowDirect) {
|
||||
if (!opts->allowDirect) {
|
||||
printf("No (-i specified)\n");
|
||||
}
|
||||
else if (getenv("LIBGL_ALWAYS_INDIRECT")) {
|
||||
@ -529,19 +532,22 @@ print_screen_info(Display *dpy, int scrnum, Bool allowDirect,
|
||||
"LIBGL_DEBUG=verbose)\n");
|
||||
}
|
||||
}
|
||||
printf("server glx vendor string: %s\n", serverVendor);
|
||||
printf("server glx version string: %s\n", serverVersion);
|
||||
printf("server glx extensions:\n");
|
||||
print_extension_list(serverExtensions, singleLine);
|
||||
printf("client glx vendor string: %s\n", clientVendor);
|
||||
printf("client glx version string: %s\n", clientVersion);
|
||||
printf("client glx extensions:\n");
|
||||
print_extension_list(clientExtensions, singleLine);
|
||||
printf("GLX version: %u.%u\n", glxVersionMajor, glxVersionMinor);
|
||||
printf("GLX extensions:\n");
|
||||
print_extension_list(glxExtensions, singleLine);
|
||||
if (opts->mode != Brief) {
|
||||
printf("server glx vendor string: %s\n", serverVendor);
|
||||
printf("server glx version string: %s\n", serverVersion);
|
||||
printf("server glx extensions:\n");
|
||||
print_extension_list(serverExtensions, opts->singleLine);
|
||||
printf("client glx vendor string: %s\n", clientVendor);
|
||||
printf("client glx version string: %s\n", clientVersion);
|
||||
printf("client glx extensions:\n");
|
||||
print_extension_list(clientExtensions, opts->singleLine);
|
||||
printf("GLX version: %u.%u\n", glxVersionMajor, glxVersionMinor);
|
||||
printf("GLX extensions:\n");
|
||||
print_extension_list(glxExtensions, opts->singleLine);
|
||||
}
|
||||
if (strstr(glxExtensions, "GLX_MESA_query_renderer"))
|
||||
query_renderer();
|
||||
print_gpu_memory_info(glExtensions);
|
||||
printf("OpenGL vendor string: %s\n", glVendor);
|
||||
printf("OpenGL renderer string: %s\n", glRenderer);
|
||||
} else
|
||||
@ -578,10 +584,10 @@ print_screen_info(Display *dpy, int scrnum, Bool allowDirect,
|
||||
|
||||
CheckError(__LINE__);
|
||||
|
||||
printf("%s extensions:\n", oglstring);
|
||||
print_extension_list(glExtensions, singleLine);
|
||||
|
||||
CheckError(__LINE__);
|
||||
if (opts->mode != Brief) {
|
||||
printf("%s extensions:\n", oglstring);
|
||||
print_extension_list(glExtensions, opts->singleLine);
|
||||
}
|
||||
|
||||
if (limits) {
|
||||
print_limits(glExtensions, oglstring, version, &extfuncs);
|
||||
@ -1250,19 +1256,21 @@ main(int argc, char *argv[])
|
||||
print_display_info(dpy);
|
||||
for (scrnum = 0; scrnum < numScreens; scrnum++) {
|
||||
mesa_hack(dpy, scrnum);
|
||||
coreWorked = print_screen_info(dpy, scrnum, opts.allowDirect,
|
||||
True, False, opts.limits,
|
||||
opts.singleLine, False);
|
||||
print_screen_info(dpy, scrnum, opts.allowDirect, False, False,
|
||||
opts.limits, opts.singleLine, coreWorked);
|
||||
print_screen_info(dpy, scrnum, opts.allowDirect, False, True, False,
|
||||
opts.singleLine, True);
|
||||
coreWorked = print_screen_info(dpy, scrnum, &opts,
|
||||
True, False, opts.limits, False);
|
||||
print_screen_info(dpy, scrnum, &opts, False, False,
|
||||
opts.limits, coreWorked);
|
||||
print_screen_info(dpy, scrnum, &opts, False, True, False, True);
|
||||
|
||||
printf("\n");
|
||||
print_visual_info(dpy, scrnum, opts.mode);
|
||||
|
||||
if (opts.mode != Brief) {
|
||||
print_visual_info(dpy, scrnum, opts.mode);
|
||||
#ifdef GLX_VERSION_1_3
|
||||
print_fbconfig_info(dpy, scrnum, opts.mode);
|
||||
print_fbconfig_info(dpy, scrnum, opts.mode);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (scrnum + 1 < numScreens)
|
||||
printf("\n\n");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user