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:
 ------
-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.
@@ -52,22 +52,12 @@ value1
 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]
-fake_mesa
+Gallium 0.4 on llvmpipe (LLVM 0x301)
+
+[version]
+2.1 Mesa 9.0.2
 
 [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]
-2048
+8192
+
+[max texture units]
+8