diff --git a/src/texture.c b/src/texture.c
index 9ce703c..4da5d65 100644
--- a/src/texture.c
+++ b/src/texture.c
@@ -258,14 +258,15 @@ bindPixmapToTexture (CompScreen *screen,
attribs[i++] = GLX_MIPMAP_TEXTURE_EXT;
attribs[i++] = config->mipmap;
- /* If only one two-dimensional texture target is supported,
- then use that target and avoid a possible round trip in
- glXQueryDrawable. Allow the server to choose texture target
- when it supports more than one for this fbconfig. */
- if (!(config->textureTargets & GLX_TEXTURE_2D_BIT_EXT))
- target = GLX_TEXTURE_RECTANGLE_EXT;
- else if (!(config->textureTargets & GLX_TEXTURE_RECTANGLE_BIT_EXT))
+ /* If no texture target is specified in the fbconfig, or only the
+ TEXTURE_2D target is specified and GL_texture_non_power_of_two
+ is not supported, then allow the server to choose the texture target. */
+ if (config->textureTargets & GLX_TEXTURE_2D_BIT_EXT &&
+ (screen->textureNonPowerOfTwo ||
+ (POWER_OF_TWO (width) && POWER_OF_TWO (height))))
target = GLX_TEXTURE_2D_EXT;
+ else if (config->textureTargets & GLX_TEXTURE_RECTANGLE_BIT_EXT)
+ target = GLX_TEXTURE_RECTANGLE_EXT;
if (target)
{