Comment 15 for bug 428769

Revision history for this message
Bryce Harrington (bryce) wrote :

I took another look at this as part of handling bug #556631.

In Karmic, /usr/bin/compiz was a shell script, which included a check for max texture size:

check_texture_size()
{
        # Check how many screens we've got and iterate over them
        N=$(xdpyinfo | grep -i "number of screens" | sed 's/.*[^0-9]//g')
        for i in $(seq 1 $N); do
            verbose "Checking screen $i"
            TEXTURE_LIMIT=$(glxinfo -l | grep GL_MAX_TEXTURE_SIZE | sed -n "$i s/^.*=[^0-9]//g p")
            RESOLUTION=$(xdpyinfo | grep -i dimensions: | sed -n -e "$i s/^ *dimensions: *\([0-9]*x[0-9]*\) pixels.*/\1/ p")
            VRES=$(echo $RESOLUTION | sed 's/.*x//')
            HRES=$(echo $RESOLUTION | sed 's/x.*//')
            verbose "Comparing resolution ($RESOLUTION) to maximum 3D texture size ($TEXTURE_LIMIT): ";
            if [ $VRES -gt $TEXTURE_LIMIT ] || [ $HRES -gt $TEXTURE_LIMIT ]; then
                verbose "Failed.\n"
         return 1;
            fi
            verbose "Passed.\n"
        done
        return 0
}

It appears that as of 1:0.8.4-0ubuntu4 in lucid, the checks that the compiz wrapper had been doing have moved to the compiz binary itself:

bryce@blumonc:~$ cat /etc/lsb-release ; file /usr/bin/compiz
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu lucid (development branch)"
/usr/bin/compiz: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

compiz (1:0.8.4-0ubuntu4) lucid; urgency=low
...
  [ Travis Watkins ]
  * debian/patches/060_move_checks_to_compiz.patch:
    - add all relevant checks from compiz-manager to compiz itself
      Compiz already checks for almost everything it needs so there is no
      need to check twice.

So the texture size check appears to be occurring in this chunk of the patch:

@@ -244,13 +246,21 @@
     CompFBConfig *config = &screen->glxPixmapFBConfigs[depth];
     int attribs[7], i = 0;

+ if (width > screen->maxTextureSize || height > screen->maxTextureSize)
+ {
+ compLogMessage ("core", CompLogLevelWarn,
+ "Exceeded max texture size");
+
+ launchFallbackWM ();
+ }
+
     if (!config->fbConfig)
     {
  compLogMessage ("core", CompLogLevelWarn,
    "No GLXFBConfig for depth %d",
    depth);

- return FALSE;
+ launchFallbackWM ();
     }

     attribs[i++] = GLX_TEXTURE_FORMAT_EXT;

So that all looks like it should work... You should get an error message "Exceeded max texture size" in your compiz log