Bug 1376039 - WebGL Conformance Failure: deqp/functional/gles3/integerstatequery.html. r=jgilbert

--HG--
extra : rebase_source : b8beba46757c7218d573367be82e162737e4a1c7
This commit is contained in:
Samuel Vargas 2017-06-23 16:19:49 -07:00
Родитель 6a02b0ecf6
Коммит d7f0c12cd3
3 изменённых файлов: 35 добавлений и 21 удалений

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

@ -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,