shailesh / pyglet

Automatically exported from code.google.com/p/pyglet
BSD 3-Clause "New" or "Revised" License
0 stars 0 forks source link

vsync causes apps to run at 1/3 fps: glxext_arb.glXWaitVideoSyncSGI hangs #477

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
The following program:

import pyglet
window = pyglet.window.Window()
window.push_handlers(pyglet.window.event.WindowEventLogger())
#window.set_vsync(0)
pyglet.app.run()

Generates output at roughly 1/3 fps while constantly moving the mouse over
the window. (That is, it hangs for three seconds, prints all the events
that have built up, and hangs for another three seconds.) If I uncomment
the fourth line, output is produced in a steady stream.

By adding print statements to the pyglet source, I traced the hang to
XlibWindow.flip(), line 791/792 in window/xlib/__init__.py:
glxext_arb.glXWaitVideoSyncSGI(2, (count.value + 1) % 2, byref(count))

Manpage for this command:
http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=linux&db=man&fname=/
usr/share/catman/man3G/glxwaitvideosyncsgi.3g.html
Changing the first argument to 1 causes the hang to go away, but I suspect
that isn't actually a fix.

The really weird thing is that when I first installed pyglet two days ago,
it worked fine. Then, an unknown number of hours later, it didn't. I don't
recall doing anything that would plausibly have caused it to break, and the
library which I believe provides this function (/usr/lib/libGL.so, which
has glXWaitVideoSyncSGI in its strings output) hasn't been modified since
october. So I have no idea what's going on there.
(Hmm, one possibility consistent with the data is that it works with an
external monitor. Unfortunately I don't have one to hand, so I can't test
that right now.)

Possibly this ought to go to someone further up the toolchain, but I don't
know who, and I'm not experiencing issues with anything other than pyglet.

I'm using an eee pc 901 running Gentoo linux, kernel 2.6.31.6 with some
patches from Gentoo upstream applied.

I don't have tools/gl_info.py in the source, but here's `python -m
pyglet.info`:
Python
------------------------------------------------------------------------------
sys.version: 2.6.4 (r264:75706, Mar  9 2010, 17:24:27)
[GCC 4.3.4]
sys.platform: linux2
os.getcwd(): /home/phil

pyglet
------------------------------------------------------------------------------
pyglet.version: 1.1.4
pyglet.__file__: /usr/lib/python2.6/site-packages/pyglet/__init__.pyc
pyglet.options['debug_trace_depth'] = 1
pyglet.options['font'] = ('gdiplus', 'win32')
pyglet.options['xsync'] = True
pyglet.options['debug_trace_flush'] = True
pyglet.options['debug_win32'] = False
pyglet.options['debug_gl_trace'] = False
pyglet.options['debug_x11'] = False
pyglet.options['shadow_window'] = True
pyglet.options['debug_font'] = False
pyglet.options['debug_media'] = False
pyglet.options['debug_trace'] = False
pyglet.options['debug_lib'] = False
pyglet.options['graphics_vbo'] = True
pyglet.options['vsync'] = None
pyglet.options['debug_trace_args'] = False
pyglet.options['debug_gl'] = True
pyglet.options['debug_graphics_batch'] = False
pyglet.options['audio'] = ('directsound', 'openal', 'alsa', 'silent')
pyglet.options['debug_texture'] = False
pyglet.options['debug_gl_trace_args'] = False

pyglet.window
------------------------------------------------------------------------------
platform: <pyglet.window.xlib.XlibPlatform object at 0x92c1ecc>
display: <pyglet.window.xlib.XlibDisplayDevice object at 0x92c1f6c>
screens[0]: XlibScreen(screen=0, x=0, y=0, width=1024, height=600, xinerama=1)
config['double_buffer'] = 1
config['stereo'] = 0
config['buffer_size'] = 24
config['aux_buffers'] = 0
config['sample_buffers'] = 0
config['samples'] = 0
config['red_size'] = 8
config['green_size'] = 8
config['blue_size'] = 8
config['alpha_size'] = 0
config['depth_size'] = 24
config['stencil_size'] = 0
config['accum_red_size'] = 0
config['accum_green_size'] = 0
config['accum_blue_size'] = 0
config['accum_alpha_size'] = 0
context: XlibGLContext()

pyglet.gl.gl_info
------------------------------------------------------------------------------
gl_info.get_version(): 1.4 Mesa 7.5.2
gl_info.get_vendor(): Tungsten Graphics, Inc
gl_info.get_renderer(): Mesa DRI Intel(R) 945GME GEM 20090712 2009Q2 RC3
x86/MMX/SSE2
gl_info.get_extensions():
   GL_3DFX_texture_compression_FXT1
   GL_APPLE_client_storage
   GL_APPLE_packed_pixels
   GL_ARB_depth_texture
   GL_ARB_draw_buffers
   GL_ARB_fragment_program
   GL_ARB_multisample
   GL_ARB_multitexture
   GL_ARB_pixel_buffer_object
   GL_ARB_point_parameters
   GL_ARB_shadow
   GL_ARB_texture_border_clamp
   GL_ARB_texture_compression
   GL_ARB_texture_cube_map
   GL_ARB_texture_env_add
   GL_ARB_texture_env_combine
   GL_ARB_texture_env_crossbar
   GL_ARB_texture_env_dot3
   GL_ARB_texture_mirrored_repeat
   GL_ARB_texture_non_power_of_two
   GL_ARB_texture_rectangle
   GL_ARB_transpose_matrix
   GL_ARB_vertex_buffer_object
   GL_ARB_vertex_program
   GL_ARB_window_pos
   GL_ATI_blend_equation_separate
   GL_ATI_texture_env_combine3
   GL_EXT_abgr
   GL_EXT_bgra
   GL_EXT_blend_color
   GL_EXT_blend_equation_separate
   GL_EXT_blend_func_separate
   GL_EXT_blend_logic_op
   GL_EXT_blend_minmax
   GL_EXT_blend_subtract
   GL_EXT_compiled_vertex_array
   GL_EXT_copy_texture
   GL_EXT_cull_vertex
   GL_EXT_draw_range_elements
   GL_EXT_fog_coord
   GL_EXT_framebuffer_blit
   GL_EXT_framebuffer_object
   GL_EXT_multi_draw_arrays
   GL_EXT_packed_depth_stencil
   GL_EXT_packed_pixels
   GL_EXT_pixel_buffer_object
   GL_EXT_point_parameters
   GL_EXT_polygon_offset
   GL_EXT_rescale_normal
   GL_EXT_secondary_color
   GL_EXT_separate_specular_color
   GL_EXT_shadow_funcs
   GL_EXT_stencil_wrap
   GL_EXT_subtexture
   GL_EXT_texture
   GL_EXT_texture3D
   GL_EXT_texture_edge_clamp
   GL_EXT_texture_env_add
   GL_EXT_texture_env_combine
   GL_EXT_texture_env_dot3
   GL_EXT_texture_filter_anisotropic
   GL_EXT_texture_lod_bias
   GL_EXT_texture_object
   GL_EXT_texture_rectangle
   GL_EXT_vertex_array
   GL_IBM_multimode_draw_arrays
   GL_IBM_rasterpos_clip
   GL_IBM_texture_mirrored_repeat
   GL_INGR_blend_func_separate
   GL_MESA_pack_invert
   GL_MESA_window_pos
   GL_MESA_ycbcr_texture
   GL_NV_blend_square
   GL_NV_light_max_exponent
   GL_NV_point_sprite
   GL_NV_texgen_reflection
   GL_NV_texture_env_combine4
   GL_NV_texture_rectangle
   GL_NV_vertex_program
   GL_NV_vertex_program1_1
   GL_OES_read_format
   GL_SGIS_generate_mipmap
   GL_SGIS_texture_border_clamp
   GL_SGIS_texture_edge_clamp
   GL_SGIS_texture_lod
   GL_SUN_multi_draw_arrays

pyglet.gl.glu_info
------------------------------------------------------------------------------
glu_info.get_version(): 1.3
glu_info.get_extensions():
   GLU_EXT_nurbs_tessellator
   GLU_EXT_object_space_tess

pyglet.gl.glx_info
------------------------------------------------------------------------------
context.is_direct(): 1
glx_info.get_server_vendor(): SGI
glx_info.get_server_version(): 1.2
glx_info.get_server_extensions():
   GLX_ARB_multisample
   GLX_EXT_import_context
   GLX_EXT_texture_from_pixmap
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_MESA_copy_sub_buffer
   GLX_OML_swap_method
   GLX_SGI_swap_control
   GLX_SGIS_multisample
   GLX_SGIX_fbconfig
   GLX_SGIX_visual_select_group
glx_info.get_client_vendor(): SGI
glx_info.get_client_version(): 1.4
glx_info.get_client_extensions():
   GLX_ARB_get_proc_address
   GLX_ARB_multisample
   GLX_EXT_import_context
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_MESA_allocate_memory
   GLX_MESA_copy_sub_buffer
   GLX_MESA_swap_control
   GLX_MESA_swap_frame_usage
   GLX_OML_swap_method
   GLX_OML_sync_control
   GLX_SGI_make_current_read
   GLX_SGI_swap_control
   GLX_SGI_video_sync
   GLX_SGIS_multisample
   GLX_SGIX_fbconfig
   GLX_SGIX_pbuffer
   GLX_SGIX_visual_select_group
   GLX_EXT_texture_from_pixmap
glx_info.get_extensions():
   GLX_ARB_get_proc_address
   GLX_ARB_multisample
   GLX_EXT_import_context
   GLX_EXT_visual_info
   GLX_EXT_visual_rating
   GLX_MESA_copy_sub_buffer
   GLX_MESA_swap_frame_usage
   GLX_OML_swap_method
   GLX_SGI_video_sync
   GLX_SGIS_multisample
   GLX_SGIX_fbconfig
   GLX_SGIX_visual_select_group
   GLX_EXT_texture_from_pixmap

pyglet.media
------------------------------------------------------------------------------
driver: pyglet.media.drivers.openal

pyglet.media.avbin
------------------------------------------------------------------------------
AVbin not available.

pyglet.media.drivers.openal
------------------------------------------------------------------------------
Library: <CDLL 'libopenal.so', handle 9b6ebe8 at 9b38b8c>
Version: (1, 1)
Extensions:
   ALC_ENUMERATE_ALL_EXT ALC_ENUMERATION_EXT ALC_EXT_CAPTURE
ALC_EXT_disconnect ALC_EXT_EFX ALC_EXTX_thread_local_context

Original issue reported on code.google.com by philip.h...@gmail.com on 31 Mar 2010 at 12:35

GoogleCodeExporter commented 9 years ago
This happens to me too, is I disable vsync the app run smoother and does not 
randomly freeze as it happens with vsync enabled.

I'm using debian amd64 with nvidia driver.

Original comment by marco.am...@gmail.com on 28 Dec 2012 at 11:24

GoogleCodeExporter commented 9 years ago
I confirm this issue with Ubuntu 12.10 amd64 , nvidia driver, pyglet 1.1.4.

Also, if I disable vsync it solves the problem.

Thanks for suggesting the work-around!!

Original comment by ChAoS...@gmail.com on 17 Apr 2013 at 10:48

GoogleCodeExporter commented 9 years ago

Original comment by Adam.JT...@gmail.com on 18 Jul 2013 at 12:11