Bug 549 - Incorrect calculation of count value in GLUniformData (was: No rendering results with GLSL on Intel HD Graphics 3000 (i3 / Sandy Bridge))
Summary: Incorrect calculation of count value in GLUniformData (was: No rendering resu...
Status: VERIFIED FIXED
Alias: None
Product: Jogl
Classification: JogAmp
Component: opengl (show other bugs)
Version: 2
Hardware: Other windows
: P3 major
Assignee: Sven Gothel
URL:
Depends on:
Blocks:
 
Reported: 2012-01-04 09:51 CET by Sven Gothel
Modified: 2012-01-05 20:28 CET (History)
0 users

See Also:
Type: ---
SCM Refs:
0b56df9939bcd2e0e1bd193f597206c60fe56c51
Workaround: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sven Gothel 2012-01-04 09:51:05 CET
Preliminary applets tests on new test machine showed that our GLSL examples
(GearsES2, etc) didn't render properly (only background color).

The shader-less examples work properly.

No exception thrown on Java console.

+++

Machine: Windows 7 - x86_64

Intel Core i3-2105 Sandy Bridge
  - HD Graphics 3000
  - Intel64 Family 6 Model 42

++

WindowsGraphicsDevice[type Windows, connection decon]: GLAvailability[Native[GL4bc false, GL4 false, GL3bc true[3.1 (compatibility profile, any, new)], GL3 true[3.1 (core profile, any, new)], GL2 true[3.0 (compatibility profile, any, new)], GL2ES1 true, GLES1 false, GL2ES2 true, GLES2 false], Profiles[GLProfile[GL2ES2/GL3bc], GLProfile[GL2ES1/GL3bc], GLProfile[GL2/GL2], GLProfile[GL3/GL3], GLProfile[GL3bc/GL3bc], GLProfile[GL2GL3/GL3bc], GLProfile[GL3bc/GL3bc], , default GLProfile[GL3bc/GL3bc]]]
Swap Interval -1
GL Profile    GLProfile[GL3bc/GL3bc]
CTX VERSION   3.1 (compatibility profile, any, new) - 3.1.0 - Build 8.15.10.2559
GL            jogamp.opengl.gl4.GL4bcImpl@1ad98ef
GL_VENDOR     Intel
GL_VERSION    3.1.0 - Build 8.15.10.2559
GL_EXTENSIONS
              GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_blend_color GL_EXT_abgr GL_EXT_texture3D GL_EXT_clip_volume_hint GL_EXT_compiled_vertex_array GL_SGIS_texture_edge_clamp GL_SGIS_generate_mipmap GL_EXT_draw_range_elements GL_SGIS_texture_lod GL_EXT_rescale_normal GL_EXT_packed_pixels GL_EXT_texture_edge_clamp GL_EXT_separate_specular_color GL_ARB_multitexture GL_EXT_texture_env_combine GL_EXT_bgra GL_EXT_blend_func_separate GL_EXT_secondary_color GL_EXT_fog_coord GL_EXT_texture_env_add GL_ARB_texture_cube_map GL_ARB_transpose_matrix GL_ARB_texture_env_add GL_IBM_texture_mirrored_repeat GL_EXT_multi_draw_arrays GL_NV_blend_square GL_ARB_texture_compression GL_3DFX_texture_compression_FXT1 GL_EXT_texture_filter_anisotropic GL_ARB_texture_border_clamp GL_ARB_point_parameters GL_ARB_texture_env_combine GL_ARB_texture_env_dot3 GL_ARB_texture_env_crossbar GL_EXT_texture_compression_s3tc GL_ARB_shadow GL_ARB_window_pos GL_EXT_shadow_funcs GL_EXT_stencil_wrap GL_ARB_vertex_program GL_EXT_texture_rectangle GL_ARB_fragment_program GL_EXT_stencil_two_side GL_ATI_separate_stencil GL_ARB_vertex_buffer_object GL_EXT_texture_lod_bias GL_ARB_occlusion_query GL_ARB_fragment_shader GL_ARB_shader_objects GL_ARB_shading_language_100 GL_ARB_texture_non_power_of_two GL_ARB_vertex_shader GL_NV_texgen_reflection GL_ARB_point_sprite GL_ARB_fragment_program_shadow GL_EXT_blend_equation_separate GL_ARB_depth_texture GL_ARB_texture_rectangle GL_ARB_draw_buffers GL_ARB_color_buffer_float GL_ARB_half_float_pixel GL_ARB_texture_float GL_ARB_pixel_buffer_object GL_EXT_framebuffer_object GL_ARB_draw_instanced GL_ARB_half_float_vertex GL_EXT_draw_buffers2 GL_WIN_swap_hint GL_EXT_texture_sRGB GL_ARB_multisample GL_EXT_packed_float GL_EXT_texture_shared_exponent GL_ARB_texture_rg GL_ARB_texture_compression_rgtc GL_NV_conditional_render GL_EXT_texture_swizzle GL_ARB_sync GL_ARB_framebuffer_sRGB GL_EXT_packed_depth_stencil GL_ARB_depth_buffer_float GL_EXT_transform_feedback GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_ARB_framebuffer_object GL_EXT_texture_array GL_EXT_texture_integer GL_ARB_map_buffer_range GL_EXT_texture_snorm GL_INTEL_performance_queries GL_ARB_copy_buffer GL_ARB_sampler_objects GL_NV_primitive_restart GL_ARB_seamless_cube_map GL_ARB_uniform_buffer_object GL_ARB_depth_clamp GL_ARB_vertex_array_bgra GL_ARB_draw_elements_base_vertex GL_ARB_fragment_coord_conventions GL_EXT_gpu_program_parameters GL_ARB_compatibility GL_ARB_vertex_array_object
GLX_EXTENSIONS
              WGL_EXT_extensions_string WGL_ARB_extensions_string WGL_ARB_pbuffer WGL_ARB_multisample WGL_EXT_depth_float WGL_ARB_create_context WGL_ARB_pixel_format WGL_ARB_pixel_format_float WGL_ARB_framebuffer_sRGB WGL_ARB_make_current_read WGL_EXT_pixel_format_packed_float WGL_EXT_swap_control WGL_ARB_buffer_region
GLSL          true, shader-compiler: true
Comment 1 Sven Gothel 2012-01-05 19:30:40 CET
Running GearsES2 with "-Djogl.debug.DebugGL" discloses the GL error:

Exception in thread "main-AWTAnimator-1" javax.media.opengl.GLException: Thread[main-AWTAnimator-1,5,main] glGetError() returned the following error codes after a call to 
  glUniform(<javax.media.opengl.GLUniformData> 
     GLUniformData[name pmvMatrix, location 22675456, size 4*4, count 6, matrix true, 
     data java.nio.HeapFloatBuffer[pos=32 lim=96 cap=96]]): 
  GL_INVALID_OPERATION ( 1282 0x502),

This happens right at GearsES2 shader initialization w/ proper values.

"-Djogl.debug.TraceGL" shows (until the GL error):


<!-- Create/Load shader code ...
Created: ShaderCode[id=2, type=FRAGMENT_SHADER, valid=false, shader:  0, source]
-->

glCreateProgram() = 1
glGetError() = 0
glCreateShader(<int> 0x8B31) = 2
glGetError() = 0
glShaderSource(<int> 0x2, <int> 0x1, <[Ljava.lang.String;>, <java.nio.IntBuffer> java.nio.DirectIntBufferU[pos=0 lim=1 cap=1])
glGetError() = 0
glCompileShader(<int> 0x2)
glGetError() = 0
glGetShaderiv(<int> 0x2, <int> 0x8B81, <[I>, <int> 0x0)
glAttachShader(<int> 0x1, <int> 0x2)
glGetError() = 0
glCreateShader(<int> 0x8B30) = 3
glGetError() = 0
glShaderSource(<int> 0x3, <int> 0x1, <[Ljava.lang.String;>, <java.nio.IntBuffer> java.nio.DirectIntBufferU[pos=0 lim=1 cap=1])
glGetError() = 0
glCompileShader(<int> 0x3)
glGetError() = 0
glGetShaderiv(<int> 0x3, <int> 0x8B81, <[I>, <int> 0x0)
glAttachShader(<int> 0x1, <int> 0x3)
glLinkProgram(<int> 0x1)
glIsProgram(<int> 0x1) = true
glGetProgramiv(<int> 0x1, <int> 0x8B82, <[I>, <int> 0x0)
glValidateProgram(<int> 0x1)
glGetProgramiv(<int> 0x1, <int> 0x8B83, <[I>, <int> 0x0)
glUseProgram(<int> 0x1)
glGetUniformLocation(<int> 0x1, <java.lang.String> pmvMatrix) = 22675456
glUniform(<javax.media.opengl.GLUniformData> GLUniformData[name pmvMatrix, location 22675456, size 4*4, count 6, matrix true, data java.nio.HeapFloatBuffer[pos=32 lim=96 cap=96]])
Comment 2 Sven Gothel 2012-01-05 20:27:37 CET
No rendering results with GLSL on Intel HD Graphics 3000 (i3 / Sandy Bridge) 

Turns out GLUniformData had a bug in calculating the 'count' of matrices, ie. it did not respect the 
given position of the buffer. Instead of 4 * 4x4 it passed 6 * 4x4 (PMVMatrix data).

This was tolerated by NV, AMD, ARM, .. driver, but not on Intel HS Graphics 3000 / Windows 7.
(Good stuff)

Notes: 
  - V-Sync seems not to work (>60fps, tearing)
  - Supports OpenGL 3.1
  - junit test result: All Passed (no failures)