added configure, gliar script, build instructions, Makefile.in
authorEleni Maria Stea <elene.mst@gmail.com>
Fri, 15 Feb 2013 11:10:06 +0000 (13:10 +0200)
committerEleni Maria Stea <elene.mst@gmail.com>
Fri, 15 Feb 2013 11:10:06 +0000 (13:10 +0200)
INSTALL
Makefile [deleted file]
Makefile.in [new file with mode: 0644]
README
configure [new file with mode: 0755]
examples/asuseee.conf [new file with mode: 0644]
examples/lenovo.conf [new file with mode: 0644]
gliar [new file with mode: 0755]
gliar.conf

diff --git a/INSTALL b/INSTALL
index 8ad1dfb..d034303 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1 +1,38 @@
-//TODO
+# libgliar - a library that can fake the OpenGL context info returned by
+# the glGet OpenGL calls
+#
+# Copyright (C) 2013 Canonical Ltd
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# 
+# Author: Eleni Maria Stea <elene.mst@gmail.com>
+
+Installation:
+-------------
+Step 1: Configure
+./configure --prefix=<installation_path> or ./configure to install the library
+in the default directory (default prefix: /usr/local/lib)
+
+Step 2: Build
+Enter the libgliar source directory and run:
+make
+
+Step 3: Install
+Inside the source directory type:
+make install (or sudo make install if you used the default prefix)
+
+Uninstall:
+----------
+Enter the source directory and type:
+make uninstall (or sudo make uninstall if you used the default prefix)
diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index ce94ac5..0000000
--- a/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-src = $(wildcard src/*.c)
-obj = $(src:.c=.o)
-lib_so = libgliar.so
-
-CFLAGS = -pedantic -Wall -g -fPIC -D_GNU_SOURCE
-
-$(lib_so): $(obj)
-       $(CC) -o $@ -shared $(obj) $(LDFLAGS)
-
-.PHONY: clean
-clean:
-       rm -f $(obj) $(lib_so)
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..8f6aa08
--- /dev/null
@@ -0,0 +1,26 @@
+src = $(wildcard src/*.c)
+obj = $(src:.c=.o)
+lib_so = libgliar.so
+gliar_sh = gliar
+
+CFLAGS = -pedantic -Wall -g -fPIC -D_GNU_SOURCE
+
+$(lib_so): $(obj)
+       $(CC) -o $@ -shared $(obj) $(LDFLAGS)
+
+.PHONY: clean
+clean:
+       rm -f $(obj) $(lib_so)
+
+.PHONY: install
+install: $(lib_so)
+       mkdir -p $(PREFIX)/lib
+       mkdir -p $(PREFIX)/bin
+       cp $(lib_so) $(PREFIX)/lib/$(lib_so)
+       cp $(gliar_sh) $(PREFIX)/bin/$(gliar_sh)
+       ldconfig
+
+.PHONY: uninstall
+uninstall:
+       rm -f $(PREFIX)/lib/$(lib_so)
+       rm -f $(PREFIX)/bin/$(gliar_sh)
diff --git a/README b/README
index aeaebc2..1efc3d0 100644 (file)
--- a/README
+++ b/README
@@ -22,7 +22,7 @@ For instructions on how to build the code, see the INSTALL file.
 
 Usage:
 ------
 
 Usage:
 ------
-LD_PRELOAD=./libgliar.so <opengl_executable>
+gliar <opengl_executable>
 
 The library will read the gliar.conf file in the user's library directory or
 the .gliar.conf file in the user's home directory.
 
 The library will read the gliar.conf file in the user's library directory or
 the .gliar.conf file in the user's home directory.
@@ -52,22 +52,12 @@ value1
 valueN
 
 Currently supported keys:
 valueN
 
 Currently supported keys:
-"vendor" (the vendor string), "extensions" (the extensions string), "version" (the opengl version string),
-"sl version" (the shading language version), "renderer" (the renderer)
-
-Example:
----------
-gliar.conf:
-[vendor]
-Mutant Stargoat
-
-[extensions]
-GL_MSG_hikiko_ext
-GL_MSG_test
-
-$ LD_PRELOAD=./libgliar glxinfo | grep -A2 "OpenGL extensions"
-OpenGL extensions:
-    GL_MSG_hikiko_ext, GL_MSG_test
-
+"vendor" (the vendor string), "extensions" (the list of the extensions), "version" (the opengl version string),
+"sl version" (the shading language version), "renderer" (the renderer), "max texture units", "max texture size"
 
 
+Example configuration files can be found in the directory examples.
+Example video: http://www.youtube.com/watch?v=v2UDGgb6AgA
 
 
+Note: The library can only restrict the capabilities of a GPU, not "emulate" non supported extensions for 
+example. If the gliar.conf contains an extension that is not supported by the user's real GPU, the library 
+will return a warning and the user's program might crash.
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..57bdd9b
--- /dev/null
+++ b/configure
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+PREFIX=/usr/local
+
+while [ $# != 0 ]
+do
+    case $1 in
+    --prefix=*)
+        PREFIX=`echo $1 | sed 's/--prefix=//'`
+        ;;
+    esac
+    shift
+done
+
+echo PREFIX=$PREFIX > Makefile
+cat Makefile.in >> Makefile
diff --git a/examples/asuseee.conf b/examples/asuseee.conf
new file mode 100644 (file)
index 0000000..9c71a71
--- /dev/null
@@ -0,0 +1,227 @@
+# example GLIAR configuration that emulates the asus eee GPU
+# copyright: Canonical Ltd, 2013
+# author: Eleni Maria Stea <elene.mst@gmail.com>
+#
+# Instructions:
+# Copy this file to ~/.gliar.conf or to gliar.conf in the 
+# libgliar directory. Then run: 
+# LD_PRELOAD=./libgliar.so <opengl_program_name> 
+#
+
+[vendor]
+VMWare, Inc
+
+[renderer]
+Gallium 0.4 on llvmpipe (LLVM 0x301)
+
+[version]
+2.1 Mesa 9.0.2
+
+[sl version]
+1.20
+
+[extensions]
+GL_ARB_multisample
+GL_EXT_abgr
+GL_EXT_bgra
+GL_EXT_blend_color
+GL_EXT_blend_minmax
+GL_EXT_blend_subtract
+GL_EXT_copy_texture
+GL_EXT_polygon_offset
+GL_EXT_subtexture
+GL_EXT_texture_object
+GL_EXT_vertex_array
+GL_EXT_compiled_vertex_array
+GL_EXT_texture
+GL_EXT_texture3D
+GL_IBM_rasterpos_clip
+GL_ARB_point_parameters
+GL_EXT_draw_range_elements
+GL_EXT_packed_pixels
+GL_EXT_point_parameters
+GL_EXT_rescale_normal
+GL_EXT_separate_specular_color
+GL_EXT_texture_edge_clamp
+GL_SGIS_generate_mipmap
+GL_SGIS_texture_border_clamp
+GL_SGIS_texture_edge_clamp
+GL_SGIS_texture_lod
+GL_ARB_multitexture
+GL_IBM_multimode_draw_arrays
+GL_IBM_texture_mirrored_repeat
+GL_ARB_texture_cube_map
+GL_ARB_texture_env_add
+GL_ARB_transpose_matrix
+GL_EXT_blend_func_separate
+GL_EXT_fog_coord
+GL_EXT_multi_draw_arrays
+GL_EXT_secondary_color
+GL_EXT_texture_env_add
+GL_EXT_texture_lod_bias
+GL_INGR_blend_func_separate
+GL_NV_blend_square
+GL_NV_light_max_exponent
+GL_NV_texgen_reflection
+GL_NV_texture_env_combine4
+GL_S3_s3tc
+GL_SUN_multi_draw_arrays
+GL_ARB_texture_border_clamp
+GL_ARB_texture_compression
+GL_EXT_framebuffer_object
+GL_EXT_texture_compression_s3tc
+GL_EXT_texture_env_combine
+GL_EXT_texture_env_dot3
+GL_MESA_window_pos
+GL_NV_packed_depth_stencil
+GL_NV_texture_rectangle
+GL_ARB_depth_texture
+GL_ARB_occlusion_query
+GL_ARB_shadow
+GL_ARB_texture_env_combine
+GL_ARB_texture_env_crossbar
+GL_ARB_texture_env_dot3
+GL_ARB_texture_mirrored_repeat
+GL_ARB_window_pos
+GL_EXT_stencil_two_side
+GL_EXT_texture_cube_map
+GL_NV_fog_distance
+GL_APPLE_packed_pixels
+GL_APPLE_vertex_array_object
+GL_ARB_draw_buffers
+GL_ARB_fragment_program
+GL_ARB_fragment_shader
+GL_ARB_shader_objects
+GL_ARB_vertex_program
+GL_ARB_vertex_shader
+GL_ATI_draw_buffers
+GL_ATI_texture_env_combine3
+GL_ATI_texture_float
+GL_EXT_shadow_funcs
+GL_EXT_stencil_wrap
+GL_MESA_pack_invert
+GL_MESA_ycbcr_texture
+GL_NV_primitive_restart
+GL_ARB_fragment_program_shadow
+GL_ARB_half_float_pixel
+GL_ARB_occlusion_query2
+GL_ARB_point_sprite
+GL_ARB_shading_language_100
+GL_ARB_sync
+GL_ARB_texture_non_power_of_two
+GL_ARB_vertex_buffer_object
+GL_ATI_blend_equation_separate
+GL_EXT_blend_equation_separate
+GL_OES_read_format
+GL_ARB_pixel_buffer_object
+GL_ARB_texture_compression_rgtc
+GL_ARB_texture_float
+GL_ARB_texture_rectangle
+GL_ATI_texture_compression_3dc
+GL_EXT_packed_float
+GL_EXT_pixel_buffer_object
+GL_EXT_texture_compression_s3tc
+GL_EXT_texture_env_combine
+GL_EXT_texture_env_dot3
+GL_MESA_window_pos
+GL_NV_packed_depth_stencil
+GL_NV_texture_rectangle
+GL_ARB_depth_texture
+GL_ARB_occlusion_query
+GL_ARB_shadow
+GL_ARB_texture_env_combine
+GL_ARB_texture_env_crossbar
+GL_ARB_texture_env_dot3
+GL_ARB_texture_mirrored_repeat
+GL_ARB_window_pos
+GL_EXT_stencil_two_side
+GL_EXT_texture_cube_map
+GL_NV_fog_distance
+GL_APPLE_packed_pixels
+GL_APPLE_vertex_array_object
+GL_ARB_draw_buffers
+GL_ARB_fragment_program
+GL_ARB_fragment_shader
+GL_ARB_shader_objects
+GL_ARB_vertex_program
+GL_ARB_vertex_shader
+GL_ATI_draw_buffers
+GL_ATI_texture_env_combine3
+GL_ATI_texture_float
+GL_EXT_shadow_funcs
+GL_EXT_stencil_wrap
+GL_MESA_pack_invert
+GL_MESA_ycbcr_texture
+GL_NV_primitive_restart
+GL_ARB_fragment_program_shadow
+GL_ARB_half_float_pixel
+GL_ARB_occlusion_query2
+GL_ARB_point_sprite
+GL_ARB_shading_language_100
+GL_ARB_sync
+GL_ARB_texture_non_power_of_two
+GL_ARB_vertex_buffer_object
+GL_ATI_blend_equation_separate
+GL_EXT_blend_equation_separate
+GL_OES_read_format
+GL_ARB_pixel_buffer_object,
+GL_ARB_texture_compression_rgtc
+GL_ARB_texture_float,
+GL_ARB_texture_rectangle
+GL_ATI_texture_compression_3dc,
+GL_EXT_packed_float
+GL_EXT_pixel_buffer_object,
+GL_EXT_texture_compression_dxt1
+GL_EXT_texture_compression_rgtc,
+GL_EXT_texture_mirror_clamp
+GL_EXT_texture_rectangle,
+GL_EXT_texture_sRGB
+GL_EXT_texture_shared_exponent,
+GL_ARB_framebuffer_object
+GL_EXT_framebuffer_blit,
+GL_EXT_framebuffer_multisample
+GL_EXT_packed_depth_stencil,
+GL_ARB_vertex_array_object
+GL_ATI_separate_stencil,
+GL_ATI_texture_mirror_once
+GL_EXT_draw_buffers2
+GL_EXT_draw_instanced,
+GL_EXT_gpu_program_parameters
+GL_EXT_texture_compression_latc,
+GL_EXT_texture_sRGB_decode
+GL_OES_EGL_image
+GL_ARB_copy_buffer,
+GL_ARB_draw_instanced
+GL_ARB_half_float_vertex
+GL_ARB_instanced_arrays,
+GL_ARB_map_buffer_range
+GL_ARB_texture_rg
+GL_ARB_texture_swizzle,
+GL_ARB_vertex_array_bgra
+GL_EXT_separate_shader_objects,
+GL_EXT_texture_swizzle
+GL_EXT_vertex_array_bgra,
+GL_NV_conditional_render
+GL_AMD_draw_buffers_blend,
+GL_ARB_ES2_compatibility
+GL_ARB_debug_output
+GL_ARB_draw_buffers_blend,
+GL_ARB_draw_elements_base_vertex
+GL_ARB_explicit_attrib_location,
+GL_ARB_fragment_coord_conventions
+GL_ARB_provoking_vertex,
+GL_ARB_sampler_objects
+GL_ARB_shader_texture_lod,
+GL_ARB_vertex_type_2_10_10_10_rev
+GL_EXT_provoking_vertex,
+GL_EXT_texture_snorm
+GL_MESA_texture_signed_rgba
+GL_ARB_robustness,
+GL_ARB_texture_storage
+GL_ARB_invalidate_subdata
+
+[max texture size]
+8192
+
+[max texture units]
+8
diff --git a/examples/lenovo.conf b/examples/lenovo.conf
new file mode 100644 (file)
index 0000000..8988275
--- /dev/null
@@ -0,0 +1,193 @@
+# example GLIAR configuration that emulates the lenovo T430 GPU
+# copyright: Canonical Ltd, 2013
+# author: Eleni Maria Stea <elene.mst@gmail.com>
+#
+# Instructions:
+# Copy this file to ~/.gliar.conf or to gliar.conf in the 
+# libgliar directory. Then run: 
+# LD_PRELOAD=./libgliar.so <opengl_program_name> 
+#
+
+[vendor]
+Intel Open Source Technology Center
+
+[renderer]
+Mesa DRI Intel(R) Ivybridge Mobile x86/MMX/SSE2
+
+[version]
+3.0 Mesa 9.0.2
+
+[sl version]
+1.30
+
+[extensions]
+GL_ARB_multisample
+GL_EXT_abgr
+GL_EXT_bgra
+GL_EXT_blend_color
+GL_EXT_blend_minmax
+GL_EXT_blend_subtract
+GL_EXT_copy_texture
+GL_EXT_polygon_offset
+GL_EXT_subtexture
+GL_EXT_texture_object
+GL_EXT_vertex_array
+GL_EXT_compiled_vertex_array
+GL_EXT_texture
+GL_EXT_texture3D
+GL_IBM_rasterpos_clip
+GL_ARB_point_parameters
+GL_EXT_draw_range_elements
+GL_EXT_packed_pixels
+GL_EXT_point_parameters
+GL_EXT_rescale_normal
+GL_EXT_separate_specular_color
+GL_EXT_texture_edge_clamp
+GL_SGIS_generate_mipmap
+GL_SGIS_texture_border_clamp
+GL_SGIS_texture_edge_clamp
+GL_SGIS_texture_lod
+GL_ARB_framebuffer_sRGB
+GL_ARB_multitexture
+GL_EXT_framebuffer_sRGB
+GL_IBM_multimode_draw_arrays
+GL_IBM_texture_mirrored_repeat
+GL_3DFX_texture_compression_FXT1
+GL_ARB_texture_cube_map
+GL_ARB_texture_env_add
+GL_ARB_transpose_matrix
+GL_EXT_blend_func_separate
+GL_EXT_fog_coord
+GL_EXT_multi_draw_arrays
+GL_EXT_secondary_color
+GL_EXT_texture_env_add
+GL_EXT_texture_filter_anisotropic
+GL_EXT_texture_lod_bias
+GL_INGR_blend_func_separate
+GL_NV_blend_square
+GL_NV_light_max_exponent
+GL_NV_texgen_reflection
+GL_NV_texture_env_combine4
+GL_S3_s3tc
+GL_SUN_multi_draw_arrays
+GL_ARB_texture_border_clamp
+GL_ARB_texture_compression
+GL_EXT_framebuffer_object
+GL_EXT_texture_compression_s3tc
+GL_EXT_texture_env_combine
+GL_EXT_texture_env_dot3
+GL_MESA_window_pos
+GL_NV_packed_depth_stencil
+GL_NV_texture_rectangle
+GL_NV_vertex_program
+GL_ARB_depth_texture
+GL_ARB_occlusion_query
+GL_ARB_shadow
+GL_ARB_texture_env_combine
+GL_ARB_texture_env_crossbar
+GL_ARB_texture_env_dot3
+GL_ARB_texture_mirrored_repeat
+GL_ARB_window_pos
+GL_ATI_envmap_bumpmap
+GL_EXT_stencil_two_side
+GL_EXT_texture_cube_map
+GL_NV_depth_clamp
+GL_NV_vertex_program1_1
+GL_APPLE_packed_pixels
+GL_APPLE_vertex_array_object
+GL_ARB_draw_buffers
+GL_ARB_fragment_program
+GL_ARB_fragment_shader
+GL_ARB_shader_objects
+GL_ARB_vertex_program
+GL_ARB_vertex_shader
+GL_ATI_draw_buffers
+GL_ATI_texture_env_combine3
+GL_ATI_texture_float
+GL_EXT_shadow_funcs
+GL_EXT_stencil_wrap
+GL_MESA_pack_invert
+GL_MESA_ycbcr_texture
+GL_NV_primitive_restart
+GL_ARB_depth_clamp
+GL_ARB_fragment_program_shadow
+GL_ARB_half_float_pixel
+GL_ARB_occlusion_query2
+GL_ARB_point_sprite
+GL_ARB_shading_language_100
+GL_ARB_sync
+GL_ARB_texture_non_power_of_two
+GL_ARB_vertex_buffer_object
+GL_ATI_blend_equation_separate
+GL_EXT_blend_equation_separate
+GL_OES_read_format
+GL_ARB_color_buffer_float
+GL_ARB_pixel_buffer_object
+GL_ARB_texture_compression_rgtc
+GL_ARB_texture_float
+GL_ARB_texture_rectangle
+GL_EXT_packed_float
+GL_EXT_pixel_buffer_object
+GL_EXT_texture_compression_dxt1
+GL_EXT_texture_compression_rgtc
+GL_EXT_texture_rectangle
+GL_EXT_texture_sRGB
+GL_EXT_texture_shared_exponent
+GL_ARB_framebuffer_object
+GL_EXT_framebuffer_blit
+GL_EXT_framebuffer_multisample
+GL_EXT_packed_depth_stencil
+GL_APPLE_object_purgeable
+GL_ARB_vertex_array_object
+GL_ATI_separate_stencil
+GL_EXT_draw_buffers2
+GL_EXT_draw_instanced
+GL_EXT_gpu_program_parameters
+GL_EXT_texture_array
+GL_EXT_texture_integer
+GL_EXT_texture_sRGB_decode
+GL_EXT_timer_query
+GL_OES_EGL_image
+GL_MESA_texture_array
+GL_ARB_copy_buffer
+GL_ARB_depth_buffer_float
+GL_ARB_draw_instanced
+GL_ARB_half_float_vertex
+GL_ARB_instanced_arrays
+GL_ARB_map_buffer_range
+GL_ARB_texture_rg
+GL_ARB_texture_swizzle
+GL_ARB_vertex_array_bgra
+GL_EXT_separate_shader_objects
+GL_EXT_texture_swizzle
+GL_EXT_vertex_array_bgra
+GL_NV_conditional_render
+GL_AMD_draw_buffers_blend
+GL_ARB_ES2_compatibility
+GL_ARB_blend_func_extended
+GL_ARB_debug_output
+GL_ARB_draw_buffers_blend
+GL_ARB_draw_elements_base_vertex
+GL_ARB_explicit_attrib_location
+GL_ARB_fragment_coord_conventions
+GL_ARB_provoking_vertex
+GL_ARB_sampler_objects
+GL_ARB_seamless_cube_map
+GL_ARB_shader_texture_lod
+GL_ARB_texture_rgb10_a2ui
+GL_ARB_uniform_buffer_object
+GL_EXT_provoking_vertex
+GL_EXT_texture_snorm
+GL_MESA_texture_signed_rgba
+GL_ARB_robustness
+GL_ARB_shader_bit_encoding
+GL_ARB_timer_query
+GL_ARB_texture_storage
+GL_EXT_transform_feedback
+GL_ARB_invalidate_subdata
+
+[max texture size]
+8192
+
+[max texture units]
+8
diff --git a/gliar b/gliar
new file mode 100755 (executable)
index 0000000..b812c10
--- /dev/null
+++ b/gliar
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+LD_PRELOAD=libgliar.so $*
index 2082d0e..e37a289 100644 (file)
-[vendor]
-Mutant Stargoat
+# Example GLIAR configuration
+# Copyright: Canonical Ltd, 2013
+# Author: Eleni Maria Stea <elene.mst@gmail.com>
+#
+# Instructions:
+# Copy this file to ~/.gliar.conf or to gliar.conf in the 
+# libgliar directory. Then run: 
+# LD_PRELOAD=./libgliar.so <opengl_program_name> 
+#
 
 
-[extensions]
-GL_MSG_hikiko_ext
-GL_ARB_multitexture
-GL_MSG_test
+[vendor]
+VMWare, Inc
 
 [renderer]
 
 [renderer]
-fake_mesa
+Gallium 0.4 on llvmpipe (LLVM 0x301)
+
+[version]
+2.1 Mesa 9.0.2
 
 [sl version]
 
 [sl version]
-fake_sl
+1.20
 
 
-[max texture units]
-2
+[extensions]
+GL_ARB_multisample
+GL_EXT_abgr
+GL_EXT_bgra
+GL_EXT_blend_color
+GL_EXT_blend_minmax
+GL_EXT_blend_subtract
+GL_EXT_copy_texture
+GL_EXT_polygon_offset
+GL_EXT_subtexture
+GL_EXT_texture_object
+GL_EXT_vertex_array
+GL_EXT_compiled_vertex_array
+GL_EXT_texture
+GL_EXT_texture3D
+GL_IBM_rasterpos_clip
+GL_ARB_point_parameters
+GL_EXT_draw_range_elements
+GL_EXT_packed_pixels
+GL_EXT_point_parameters
+GL_EXT_rescale_normal
+GL_EXT_separate_specular_color
+GL_EXT_texture_edge_clamp
+GL_SGIS_generate_mipmap
+GL_SGIS_texture_border_clamp
+GL_SGIS_texture_edge_clamp
+GL_SGIS_texture_lod
+GL_ARB_multitexture
+GL_IBM_multimode_draw_arrays
+GL_IBM_texture_mirrored_repeat
+GL_ARB_texture_cube_map
+GL_ARB_texture_env_add
+GL_ARB_transpose_matrix
+GL_EXT_blend_func_separate
+GL_EXT_fog_coord
+GL_EXT_multi_draw_arrays
+GL_EXT_secondary_color
+GL_EXT_texture_env_add
+GL_EXT_texture_lod_bias
+GL_INGR_blend_func_separate
+GL_NV_blend_square
+GL_NV_light_max_exponent
+GL_NV_texgen_reflection
+GL_NV_texture_env_combine4
+GL_S3_s3tc
+GL_SUN_multi_draw_arrays
+GL_ARB_texture_border_clamp
+GL_ARB_texture_compression
+GL_EXT_framebuffer_object
+GL_EXT_texture_compression_s3tc
+GL_EXT_texture_env_combine
+GL_EXT_texture_env_dot3
+GL_MESA_window_pos
+GL_NV_packed_depth_stencil
+GL_NV_texture_rectangle
+GL_ARB_depth_texture
+GL_ARB_occlusion_query
+GL_ARB_shadow
+GL_ARB_texture_env_combine
+GL_ARB_texture_env_crossbar
+GL_ARB_texture_env_dot3
+GL_ARB_texture_mirrored_repeat
+GL_ARB_window_pos
+GL_EXT_stencil_two_side
+GL_EXT_texture_cube_map
+GL_NV_fog_distance
+GL_APPLE_packed_pixels
+GL_APPLE_vertex_array_object
+GL_ARB_draw_buffers
+GL_ARB_fragment_program
+GL_ARB_fragment_shader
+GL_ARB_shader_objects
+GL_ARB_vertex_program
+GL_ARB_vertex_shader
+GL_ATI_draw_buffers
+GL_ATI_texture_env_combine3
+GL_ATI_texture_float
+GL_EXT_shadow_funcs
+GL_EXT_stencil_wrap
+GL_MESA_pack_invert
+GL_MESA_ycbcr_texture
+GL_NV_primitive_restart
+GL_ARB_fragment_program_shadow
+GL_ARB_half_float_pixel
+GL_ARB_occlusion_query2
+GL_ARB_point_sprite
+GL_ARB_shading_language_100
+GL_ARB_sync
+GL_ARB_texture_non_power_of_two
+GL_ARB_vertex_buffer_object
+GL_ATI_blend_equation_separate
+GL_EXT_blend_equation_separate
+GL_OES_read_format
+GL_ARB_pixel_buffer_object
+GL_ARB_texture_compression_rgtc
+GL_ARB_texture_float
+GL_ARB_texture_rectangle
+GL_ATI_texture_compression_3dc
+GL_EXT_packed_float
+GL_EXT_pixel_buffer_object
+GL_EXT_texture_compression_s3tc
+GL_EXT_texture_env_combine
+GL_EXT_texture_env_dot3
+GL_MESA_window_pos
+GL_NV_packed_depth_stencil
+GL_NV_texture_rectangle
+GL_ARB_depth_texture
+GL_ARB_occlusion_query
+GL_ARB_shadow
+GL_ARB_texture_env_combine
+GL_ARB_texture_env_crossbar
+GL_ARB_texture_env_dot3
+GL_ARB_texture_mirrored_repeat
+GL_ARB_window_pos
+GL_EXT_stencil_two_side
+GL_EXT_texture_cube_map
+GL_NV_fog_distance
+GL_APPLE_packed_pixels
+GL_APPLE_vertex_array_object
+GL_ARB_draw_buffers
+GL_ARB_fragment_program
+GL_ARB_fragment_shader
+GL_ARB_shader_objects
+GL_ARB_vertex_program
+GL_ARB_vertex_shader
+GL_ATI_draw_buffers
+GL_ATI_texture_env_combine3
+GL_ATI_texture_float
+GL_EXT_shadow_funcs
+GL_EXT_stencil_wrap
+GL_MESA_pack_invert
+GL_MESA_ycbcr_texture
+GL_NV_primitive_restart
+GL_ARB_fragment_program_shadow
+GL_ARB_half_float_pixel
+GL_ARB_occlusion_query2
+GL_ARB_point_sprite
+GL_ARB_shading_language_100
+GL_ARB_sync
+GL_ARB_texture_non_power_of_two
+GL_ARB_vertex_buffer_object
+GL_ATI_blend_equation_separate
+GL_EXT_blend_equation_separate
+GL_OES_read_format
+GL_ARB_pixel_buffer_object,
+GL_ARB_texture_compression_rgtc
+GL_ARB_texture_float,
+GL_ARB_texture_rectangle
+GL_ATI_texture_compression_3dc,
+GL_EXT_packed_float
+GL_EXT_pixel_buffer_object,
+GL_EXT_texture_compression_dxt1
+GL_EXT_texture_compression_rgtc,
+GL_EXT_texture_mirror_clamp
+GL_EXT_texture_rectangle,
+GL_EXT_texture_sRGB
+GL_EXT_texture_shared_exponent,
+GL_ARB_framebuffer_object
+GL_EXT_framebuffer_blit,
+GL_EXT_framebuffer_multisample
+GL_EXT_packed_depth_stencil,
+GL_ARB_vertex_array_object
+GL_ATI_separate_stencil,
+GL_ATI_texture_mirror_once
+GL_EXT_draw_buffers2
+GL_EXT_draw_instanced,
+GL_EXT_gpu_program_parameters
+GL_EXT_texture_compression_latc,
+GL_EXT_texture_sRGB_decode
+GL_OES_EGL_image
+GL_ARB_copy_buffer,
+GL_ARB_draw_instanced
+GL_ARB_half_float_vertex
+GL_ARB_instanced_arrays,
+GL_ARB_map_buffer_range
+GL_ARB_texture_rg
+GL_ARB_texture_swizzle,
+GL_ARB_vertex_array_bgra
+GL_EXT_separate_shader_objects,
+GL_EXT_texture_swizzle
+GL_EXT_vertex_array_bgra,
+GL_NV_conditional_render
+GL_AMD_draw_buffers_blend,
+GL_ARB_ES2_compatibility
+GL_ARB_debug_output
+GL_ARB_draw_buffers_blend,
+GL_ARB_draw_elements_base_vertex
+GL_ARB_explicit_attrib_location,
+GL_ARB_fragment_coord_conventions
+GL_ARB_provoking_vertex,
+GL_ARB_sampler_objects
+GL_ARB_shader_texture_lod,
+GL_ARB_vertex_type_2_10_10_10_rev
+GL_EXT_provoking_vertex,
+GL_EXT_texture_snorm
+GL_MESA_texture_signed_rgba
+GL_ARB_robustness,
+GL_ARB_texture_storage
+GL_ARB_invalidate_subdata
 
 [max texture size]
 
 [max texture size]
-2048
+8192
+
+[max texture units]
+8