[FIXED] new ATI 10.1 drivers don't support some GL1x functions?

Started by indexunknown, January 30, 2010, 21:44:11

Previous topic - Next topic

princec

New build out ASAP? I'd pull the old one too, as it doesn't work properly...

Cas :)

spasi

I'd say yes, we need a new build.

There's no point pulling the last one btw. The problem exists in every build since LWJGL 2.1.0, but it only triggered with the latest ATI driver.

edit: since 2.1.0, not 2.2.0

Notch

I got the nightly 2.3 build, and it's still happening:


spasi

I cannot test the indev Minecraft version. The 3 public versions use an old 2.1.0 build that doesn't have this problem. Could you please add the following piece of code in Minecraft to help me out?

System.out.println("GL RENDERER: " + GL11.glGetString(GL11.GL_RENDERER));
System.out.println("GL VENDOR: " + GL11.glGetString(GL11.GL_VENDOR));
System.out.println("GL VERSION: " + GL11.glGetString(GL11.GL_VERSION));

ContextCapabilities caps = GLContext.getCapabilities();

System.out.println("OpenGL 3.0: " + caps.OpenGL30);
System.out.println("OpenGL 3.1: " + caps.OpenGL31);
System.out.println("OpenGL 3.2: " + caps.OpenGL32);
System.out.println("ARB_compatibility: " + caps.GL_ARB_compatibility);

if ( caps.OpenGL32 ) {
	IntBuffer buffer = ByteBuffer.allocateDirect(16 * 4).order(ByteOrder.nativeOrder()).asIntBuffer();

	GL11.glGetInteger(GL32.GL_CONTEXT_PROFILE_MASK, buffer);
	int profileMask = buffer.get(0);

	System.out.println("PROFILE MASK: " + Integer.toBinaryString(profileMask));

	System.out.println("CORE PROFILE: " + ((profileMask & GL32.GL_CONTEXT_CORE_PROFILE_BIT) != 0));
	System.out.println("COMPATIBILITY PROFILE: " + ((profileMask & GL32.GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) != 0));
}


Feel free to replace println with whatever you use for logging and make sure you run the code immediately after creating the GL context (or at least before calling anything else in GL, especially anything deprecated).

I may have found the root of the problem anyway, but I'd appreciate it if you could help me verify it. Anyone else on ATI with 10.1 feel free to run this code as well.

Matzon

thanks for working quickly on this - will release 2.3 shortly after confirmed fix.

spasi


Notch

Your account is now paid so you can test it. Thank you. =)

I updated to the latest LWJGL since the next build isn't available yet. This is what I get:

QuoteLWJGL version: 2.3
GL RENDERER: GeForce GTX 260/PCI/SSE2
GL VENDOR: NVIDIA Corporation
GL VERSION: 3.2.0
OpenGL 3.0: true
OpenGL 3.1: true
OpenGL 3.2: false
ARB_compatibility: true

Matzon


Notch

Yes. it works for me. I just posted that for reference.

spasi

I tried the indev version and it works on my ATI, no exceptions or anything. But your report shows that there's a problem on NV as well. Could you please run Minecraft with -Dorg.lwjgl.util.Debug=true and let me know if any functions are reported as missing on context creation?

Notch

It works? In 10.1? Well, that's good! :D

I create the context with just Display.create(). I'm not passing any parameters.

I get no warnings about missing functions here, all extra output I get from passing that flag is:

Initial mode: 1680 x 1050 x 32 @60Hz
OpenGL32 was reported as available but an entry point is missing
getPathFromClassLoader: searching for: OpenAL32
Failed to locate findLibrary method: java.lang.NoSuchMethodException: sun.misc.Launcher$AppClassLoader.findLibrary(java.lang.String)
Failed to locate findLibrary method: java.lang.NoSuchMethodException: java.net.URLClassLoader.findLibrary(java.lang.String)
Failed to locate findLibrary method: java.lang.NoSuchMethodException: java.security.SecureClassLoader.findLibrary(java.lang.String)
getPathFromClassLoader: searching for: lwjgl
Failed to locate findLibrary method: java.lang.NoSuchMethodException: sun.misc.Launcher$AppClassLoader.findLibrary(java.lang.String)
Failed to locate findLibrary method: java.lang.NoSuchMethodException: java.net.URLClassLoader.findLibrary(java.lang.String)
Failed to locate findLibrary method: java.lang.NoSuchMethodException: java.security.SecureClassLoader.findLibrary(java.lang.String)
getPathFromClassLoader: searching for: lwjgl
Failed to locate findLibrary method: java.lang.NoSuchMethodException: sun.misc.Launcher$AppClassLoader.findLibrary(java.lang.String)
Failed to locate findLibrary method: java.lang.NoSuchMethodException: java.net.URLClassLoader.findLibrary(java.lang.String)
Failed to locate findLibrary method: java.lang.NoSuchMethodException: java.security.SecureClassLoader.findLibrary(java.lang.String)
Found 32 OpenAL paths
T
Failed to load C:\Program Files (x86)\Java\jre6\bin\OpenAL64.dll: C
T
Failed to load .\OpenAL64.dll: C
T
Failed to load C:\Windows\Sun\Java\bin\OpenAL64.dll: C
T
Failed to load C:\Windows\system32\OpenAL64.dll: C
T
Failed to load C:\Windows\OpenAL64.dll: C
T
Failed to load C:/Program Files (x86)/Java/jre6/bin/client\OpenAL64.dll: C
T
Failed to load C:/Program Files (x86)/Java/jre6/bin\OpenAL64.dll: C
T
Failed to load C:\Program Files (x86)\JavaFX\javafx-sdk1.2\bin\OpenAL64.dll: C
T
Failed to load C:\Program Files (x86)\JavaFX\javafx-sdk1.2\emulator\bin\OpenAL64.dll: C
T
Failed to load C:\Windows\system32\OpenAL64.dll: C
T
Failed to load C:\Windows\OpenAL64.dll: C
T
Failed to load C:\Windows\System32\Wbem\OpenAL64.dll: C
T
Failed to load C:\Windows\System32\WindowsPowerShell\v1.0\\OpenAL64.dll: C
T
Failed to load C:\Program Files (x86)\Java\jdk1.6.0_17\bin\OpenAL64.dll: C
T
Failed to load E:\mc_dev\Minecraft.Client\OpenAL64.dll: C
T
Failed to load OpenAL64.dll: C
T
Failed to load C:\Program Files (x86)\Java\jre6\bin\OpenAL32.dll: C
T
F

spasi

QuoteOpenGL32 was reported as available but an entry point is missing

This is the important line. You should be getting a message that says which function is missing, not sure why it doesn't print.

Notch

Oh, there's another line when I quit the game:

Could not locate symbol glGetInteger64i_v

spasi

OK, try the next build (hmm, why hasn't the previous one shown up yet?).

What I did is to allow certain functions to be made optional when loading an extension. LWJGL has always been checking for the availability of all the functions in an extension (or core GL version). When one of them was missing, it would make it so that the whole extension was not available. For now, I've marked the following functions as optional:

glDrawElementsBaseVertex (GL32)
glDrawRangeElementsBaseVertex (GL32)
glDrawElementsInstancedBaseVertex (GL32)

The above 3 are missing from the current ATI driver.

glGetInteger64i_v (GL32)

This one is missing from the current NV driver.

This means that, for example, you'll be able to use all GL32 functions on an NV implementation, but calling glGetInteger64i_v will throw an exception. Hopefully the latest commit fixes both AMD and NV issues.

Endolf

Quote from: spasi on February 07, 2010, 18:58:10
OK, try the next build (hmm, why hasn't the previous one shown up yet?).

Because, almost without fail, the windows machines (either 32 or 64 bit) fall out of the farm whenever I go away. Just got back, win64 machines back in farm, building has resumed :)

Endolf