Bug 814716 - Limit MaxCubeMapTextureSize for Nouveau to 2K - r=jgilbert, a=akeybl

This commit is contained in:
Bill Gianopoulos 2012-11-26 18:21:39 -05:00
Родитель 7355f60b10
Коммит 823f5f0583
2 изменённых файлов: 20 добавлений и 8 удалений

Просмотреть файл

@ -293,7 +293,8 @@ GLContext::InitWithPrefix(const char *prefix, bool trygl)
"NVIDIA",
"ATI",
"Qualcomm",
"Imagination"
"Imagination",
"nouveau"
};
mVendor = VendorOther;
for (int i = 0; i < VendorOther; ++i) {
@ -512,11 +513,20 @@ GLContext::InitWithPrefix(const char *prefix, bool trygl)
#ifdef XP_MACOSX
if (mWorkAroundDriverBugs &&
mVendor == VendorIntel) {
// see bug 737182 for 2D textures, bug 684822 for cube map textures.
// see bug 737182 for 2D textures, bug 684882 for cube map textures.
mMaxTextureSize = NS_MIN(mMaxTextureSize, 4096);
mMaxCubeMapTextureSize = NS_MIN(mMaxCubeMapTextureSize, 512);
// for good measure, we align renderbuffers on what we do for 2D textures
mMaxRenderbufferSize = NS_MIN(mMaxRenderbufferSize, 4096);
mNeedsTextureSizeChecks = true;
}
#endif
#ifdef MOZ_X11
if (mWorkAroundDriverBugs &&
mVendor == VendorNouveau) {
// see bug 814716. Clamp MaxCubeMapTextureSize at 2K for Nouveau.
mMaxCubeMapTextureSize = NS_MIN(mMaxCubeMapTextureSize, 2048);
mNeedsTextureSizeChecks = true;
}
#endif

Просмотреть файл

@ -548,6 +548,7 @@ public:
mMaxCubeMapTextureSize(0),
mMaxTextureImageSize(0),
mMaxRenderbufferSize(0),
mNeedsTextureSizeChecks(false),
mWorkAroundDriverBugs(true)
#ifdef DEBUG
, mGLError(LOCAL_GL_NO_ERROR)
@ -724,6 +725,7 @@ public:
VendorATI,
VendorQualcomm,
VendorImagination,
VendorNouveau,
VendorOther
};
@ -1943,16 +1945,17 @@ protected:
GLint mMaxCubeMapTextureSize;
GLint mMaxTextureImageSize;
GLint mMaxRenderbufferSize;
bool mNeedsTextureSizeChecks;
bool mWorkAroundDriverBugs;
bool IsTextureSizeSafeToPassToDriver(GLenum target, GLsizei width, GLsizei height) const {
#ifdef XP_MACOSX
if (mWorkAroundDriverBugs &&
mVendor == VendorIntel) {
// see bug 737182 for 2D textures, bug 684822 for cube map textures.
// some drivers handle incorrectly some large texture sizes that are below the
if (mNeedsTextureSizeChecks) {
// some drivers incorrectly handle some large texture sizes that are below the
// max texture size that they report. So we check ourselves against our own values
// (mMax[CubeMap]TextureSize).
// see bug 737182 for Mac Intel 2D textures
// see bug 684882 for Mac Intel cube map textures
// see bug 814716 for Mesa Nouveau
GLsizei maxSize = target == LOCAL_GL_TEXTURE_CUBE_MAP ||
(target >= LOCAL_GL_TEXTURE_CUBE_MAP_POSITIVE_X &&
target <= LOCAL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)
@ -1960,7 +1963,6 @@ protected:
: mMaxTextureSize;
return width <= maxSize && height <= maxSize;
}
#endif
return true;
}