8007386: On physical machine (video card is Intel Q45) the text is blank
Reviewed-by: prr, jchen
This commit is contained in:
parent
b75899e391
commit
4ff41501d1
jdk/src/solaris
@ -96,6 +96,7 @@ public class X11GraphicsEnvironment
|
||||
|
||||
// Now check for XRender system property
|
||||
boolean xRenderRequested = true;
|
||||
boolean xRenderIgnoreLinuxVersion = false;
|
||||
String xProp = System.getProperty("sun.java2d.xrender");
|
||||
if (xProp != null) {
|
||||
if (xProp.equals("false") || xProp.equals("f")) {
|
||||
@ -104,6 +105,10 @@ public class X11GraphicsEnvironment
|
||||
xRenderRequested = true;
|
||||
xRenderVerbose = true;
|
||||
}
|
||||
|
||||
if(xProp.equalsIgnoreCase("t") || xProp.equalsIgnoreCase("true")) {
|
||||
xRenderIgnoreLinuxVersion = true;
|
||||
}
|
||||
}
|
||||
|
||||
// initialize the X11 display connection
|
||||
@ -121,7 +126,7 @@ public class X11GraphicsEnvironment
|
||||
|
||||
// only attempt to initialize Xrender if it was requested
|
||||
if (xRenderRequested) {
|
||||
xRenderAvailable = initXRender(xRenderVerbose);
|
||||
xRenderAvailable = initXRender(xRenderVerbose, xRenderIgnoreLinuxVersion);
|
||||
if (xRenderVerbose && !xRenderAvailable) {
|
||||
System.out.println(
|
||||
"Could not enable XRender pipeline");
|
||||
@ -159,7 +164,7 @@ public class X11GraphicsEnvironment
|
||||
private static boolean xRenderVerbose;
|
||||
private static boolean xRenderAvailable;
|
||||
|
||||
private static native boolean initXRender(boolean verbose);
|
||||
private static native boolean initXRender(boolean verbose, boolean ignoreLinuxVersion);
|
||||
public static boolean isXRenderAvailable() {
|
||||
return xRenderAvailable;
|
||||
}
|
||||
|
@ -31,6 +31,10 @@
|
||||
|
||||
#include <X11/extensions/Xrender.h>
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/utsname.h>
|
||||
#endif
|
||||
|
||||
/* On Solaris 10 updates 8, 9, the render.h file defines these
|
||||
* protocol values but does not define the structs in Xrender.h.
|
||||
* Thus in order to get these always defined on Solaris 10
|
||||
@ -131,7 +135,7 @@ static
|
||||
#define MAX_PAYLOAD (262140u - 36u)
|
||||
#define MAXUINT (0xffffffffu)
|
||||
|
||||
static jboolean IsXRenderAvailable(jboolean verbose) {
|
||||
static jboolean IsXRenderAvailable(jboolean verbose, jboolean ignoreLinuxVersion) {
|
||||
|
||||
void *xrenderlib;
|
||||
|
||||
@ -253,6 +257,31 @@ static jboolean IsXRenderAvailable(jboolean verbose) {
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
/*
|
||||
* Check for Linux >= 3.5 (Ubuntu 12.04.02 LTS) to avoid hitting
|
||||
* https://bugs.freedesktop.org/show_bug.cgi?id=48045
|
||||
*/
|
||||
struct utsname utsbuf;
|
||||
if(uname(&utsbuf) >= 0) {
|
||||
int major, minor, revision;
|
||||
if(sscanf(utsbuf.release, "%i.%i.%i", &major, &minor, &revision) == 3) {
|
||||
if(major < 3 || (major == 3 && minor < 5)) {
|
||||
if(!ignoreLinuxVersion) {
|
||||
available = JNI_FALSE;
|
||||
}
|
||||
else if(verbose) {
|
||||
printf("WARNING: Linux < 3.5 detected.\n"
|
||||
"The pipeline will be enabled, but graphical "
|
||||
"artifacts can occur with old graphic drivers.\n"
|
||||
"See the release notes for more details.\n");
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // __linux__
|
||||
|
||||
return available;
|
||||
}
|
||||
/*
|
||||
@ -262,7 +291,7 @@ static jboolean IsXRenderAvailable(jboolean verbose) {
|
||||
*/
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_sun_awt_X11GraphicsEnvironment_initXRender
|
||||
(JNIEnv *env, jclass x11ge, jboolean verbose)
|
||||
(JNIEnv *env, jclass x11ge, jboolean verbose, jboolean ignoreLinuxVersion)
|
||||
{
|
||||
#ifndef HEADLESS
|
||||
static jboolean xrenderAvailable = JNI_FALSE;
|
||||
@ -277,7 +306,7 @@ Java_sun_awt_X11GraphicsEnvironment_initXRender
|
||||
}
|
||||
#endif
|
||||
AWT_LOCK();
|
||||
xrenderAvailable = IsXRenderAvailable(verbose);
|
||||
xrenderAvailable = IsXRenderAvailable(verbose, ignoreLinuxVersion);
|
||||
AWT_UNLOCK();
|
||||
firstTime = JNI_FALSE;
|
||||
}
|
||||
@ -294,9 +323,11 @@ Java_sun_java2d_xr_XRBackendNative_initIDs(JNIEnv *env, jclass cls) {
|
||||
XImage* defaultImg;
|
||||
jfieldID maskImgID;
|
||||
jlong fmt8;
|
||||
jlong fmt24;
|
||||
jlong fmt32;
|
||||
|
||||
jfieldID a8ID = (*env)->GetStaticFieldID(env, cls, "FMTPTR_A8", "J");
|
||||
jfieldID rgb24ID = (*env)->GetStaticFieldID(env, cls, "FMTPTR_ARGB24", "J");
|
||||
jfieldID argb32ID = (*env)->GetStaticFieldID(env, cls, "FMTPTR_ARGB32", "J");
|
||||
|
||||
if (awt_display == (Display *)NULL) {
|
||||
@ -304,9 +335,11 @@ Java_sun_java2d_xr_XRBackendNative_initIDs(JNIEnv *env, jclass cls) {
|
||||
}
|
||||
|
||||
fmt8 = ptr_to_jlong(XRenderFindStandardFormat(awt_display, PictStandardA8));
|
||||
fmt24 = ptr_to_jlong(XRenderFindStandardFormat(awt_display, PictStandardRGB24));
|
||||
fmt32 = ptr_to_jlong(XRenderFindStandardFormat(awt_display, PictStandardARGB32));
|
||||
|
||||
(*env)->SetStaticLongField(env, cls, a8ID, fmt8);
|
||||
(*env)->SetStaticLongField(env, cls, rgb24ID, fmt24);
|
||||
(*env)->SetStaticLongField(env, cls, argb32ID, fmt32);
|
||||
|
||||
maskData = (char *) malloc(32*32);
|
||||
|
Loading…
x
Reference in New Issue
Block a user