зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1376039 - WebGL Conformance Failure: deqp/functional/gles3/integerstatequery.html. r=jgilbert
--HG-- extra : rebase_source : b8beba46757c7218d573367be82e162737e4a1c7
This commit is contained in:
Родитель
6a02b0ecf6
Коммит
d7f0c12cd3
|
@ -1580,6 +1580,7 @@ public:
|
|||
, info(nsCString(_info))
|
||||
{ }
|
||||
};
|
||||
bool ValidateBlendFuncEnum(GLenum factor, const char *funcName, const char* varName);
|
||||
protected:
|
||||
bool InitWebGL2(FailureReason* const out_failReason);
|
||||
|
||||
|
@ -1604,8 +1605,6 @@ protected:
|
|||
bool InitAndValidateGL(FailureReason* const out_failReason);
|
||||
|
||||
bool ValidateBlendEquationEnum(GLenum cap, const char* info);
|
||||
bool ValidateBlendFuncDstEnum(GLenum mode, const char* info);
|
||||
bool ValidateBlendFuncSrcEnum(GLenum mode, const char* info);
|
||||
bool ValidateBlendFuncEnumsCompatibility(GLenum sfactor, GLenum dfactor,
|
||||
const char* info);
|
||||
bool ValidateComparisonEnum(GLenum target, const char* info);
|
||||
|
|
|
@ -215,14 +215,39 @@ void WebGLContext::BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
|
|||
gl->fBlendEquationSeparate(modeRGB, modeAlpha);
|
||||
}
|
||||
|
||||
static bool
|
||||
ValidateBlendFuncEnums(WebGLContext* webgl, GLenum srcRGB, GLenum srcAlpha,
|
||||
GLenum dstRGB, GLenum dstAlpha, const char* funcName)
|
||||
{
|
||||
if (!webgl->IsWebGL2()) {
|
||||
if (dstRGB == LOCAL_GL_SRC_ALPHA_SATURATE || dstAlpha == LOCAL_GL_SRC_ALPHA_SATURATE) {
|
||||
const nsPrintfCString err("%s: LOCAL_GL_SRC_ALPHA_SATURATE as a destination"
|
||||
" blend function is disallowed in WebGL 1 (dstRGB ="
|
||||
" 0x%04x, dstAlpha = 0x%04x).",
|
||||
funcName, dstRGB, dstAlpha);
|
||||
webgl->ErrorInvalidEnum("%s", err.get());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!webgl->ValidateBlendFuncEnum(srcRGB, funcName, "srcRGB") ||
|
||||
!webgl->ValidateBlendFuncEnum(srcAlpha, funcName, "srcAlpha") ||
|
||||
!webgl->ValidateBlendFuncEnum(dstRGB, funcName, "dstRGB") ||
|
||||
!webgl->ValidateBlendFuncEnum(dstAlpha, funcName, "dstAlpha"))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WebGLContext::BlendFunc(GLenum sfactor, GLenum dfactor)
|
||||
{
|
||||
if (IsContextLost())
|
||||
return;
|
||||
|
||||
if (!ValidateBlendFuncSrcEnum(sfactor, "blendFunc: sfactor") ||
|
||||
!ValidateBlendFuncDstEnum(dfactor, "blendFunc: dfactor"))
|
||||
return;
|
||||
if (!ValidateBlendFuncEnums(this, sfactor, sfactor, dfactor, dfactor, "blendFunc"))
|
||||
return;
|
||||
|
||||
if (!ValidateBlendFuncEnumsCompatibility(sfactor, dfactor, "blendFuncSeparate: srcRGB and dstRGB"))
|
||||
return;
|
||||
|
@ -238,11 +263,8 @@ WebGLContext::BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB,
|
|||
if (IsContextLost())
|
||||
return;
|
||||
|
||||
if (!ValidateBlendFuncSrcEnum(srcRGB, "blendFuncSeparate: srcRGB") ||
|
||||
!ValidateBlendFuncSrcEnum(srcAlpha, "blendFuncSeparate: srcAlpha") ||
|
||||
!ValidateBlendFuncDstEnum(dstRGB, "blendFuncSeparate: dstRGB") ||
|
||||
!ValidateBlendFuncDstEnum(dstAlpha, "blendFuncSeparate: dstAlpha"))
|
||||
return;
|
||||
if (!ValidateBlendFuncEnums(this, srcRGB, srcAlpha, dstRGB, dstAlpha, "blendFuncSeparate"))
|
||||
return;
|
||||
|
||||
// note that we only check compatibity for the RGB enums, no need to for the Alpha enums, see
|
||||
// "Section 6.8 forgetting to mention alpha factors?" thread on the public_webgl mailing list
|
||||
|
|
|
@ -64,7 +64,7 @@ WebGLContext::ValidateBlendEquationEnum(GLenum mode, const char* info)
|
|||
}
|
||||
|
||||
bool
|
||||
WebGLContext::ValidateBlendFuncDstEnum(GLenum factor, const char* info)
|
||||
WebGLContext::ValidateBlendFuncEnum(GLenum factor, const char *funcName, const char* varName)
|
||||
{
|
||||
switch (factor) {
|
||||
case LOCAL_GL_ZERO:
|
||||
|
@ -81,23 +81,16 @@ WebGLContext::ValidateBlendFuncDstEnum(GLenum factor, const char* info)
|
|||
case LOCAL_GL_ONE_MINUS_CONSTANT_COLOR:
|
||||
case LOCAL_GL_CONSTANT_ALPHA:
|
||||
case LOCAL_GL_ONE_MINUS_CONSTANT_ALPHA:
|
||||
case LOCAL_GL_SRC_ALPHA_SATURATE:
|
||||
return true;
|
||||
|
||||
default:
|
||||
ErrorInvalidEnumInfo(info, factor);
|
||||
const nsPrintfCString err("%s: %s", funcName, varName);
|
||||
ErrorInvalidEnumInfo(err.get(), factor);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
WebGLContext::ValidateBlendFuncSrcEnum(GLenum factor, const char* info)
|
||||
{
|
||||
if (factor == LOCAL_GL_SRC_ALPHA_SATURATE)
|
||||
return true;
|
||||
|
||||
return ValidateBlendFuncDstEnum(factor, info);
|
||||
}
|
||||
|
||||
bool
|
||||
WebGLContext::ValidateBlendFuncEnumsCompatibility(GLenum sfactor,
|
||||
GLenum dfactor,
|
||||
|
|
Загрузка…
Ссылка в новой задаче