return string("ivec3(" + x + "," + y + "," + z + ")");
default:
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
return string("((" + z + "*" + toString(gridSize.x()) + " + " + x + ")*" + toString(gridSize.y()) + " + " + y + ")");
default:
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
case ATOMIC_OPERATION_COMPARE_EXCHANGE: return string("compare_exchange");
default:
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
case ATOMIC_OPERATION_COMPARE_EXCHANGE: return string("imageAtomicCompSwap");
default:
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
default:
DE_FATAL("Unknown image type");
- return DE_NULL;
+ return "";
}
}
else
{
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
++currentIndex;
}
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
class IOBlock : public TopLevelObject
}
}
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
class UserDefinedIOTest : public TestCase
const std::string vertexAttrArrayInputSize = m_caseDef.vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_IMPLICIT ? ""
: m_caseDef.vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_EXPLICIT_SHADER_BUILTIN ? "gl_MaxPatchVertices"
: m_caseDef.vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_EXPLICIT_SPEC_MIN ? de::toString(MAX_TESSELLATION_PATCH_SIZE)
- : DE_NULL;
+ : deFatalStr("Invalid vertexIOArraySize");
const char* const maybePatch = isPerPatchIO ? "patch " : "";
const std::string outMaybePatch = std::string() + maybePatch + "out ";
# define DE_UNUSED_FUNCTION
#endif
+DE_INLINE const char* deFatalStr (const char* reason) { DE_ASSERT(0); return reason; }
+
#ifdef __cplusplus
}
#endif
case TOKEN_TESSELLATION_EVALUATION: program.sources.sources[SHADERTYPE_TESSELLATION_EVALUATION].push_back(source); break;
case TOKEN_GEOMETRY: program.sources.sources[SHADERTYPE_GEOMETRY].push_back(source); break;
default:
- parseError(DE_FALSE);
+ DE_FATAL("Unreachable");
}
}
else
}
default:
- parseError(DE_FALSE);
+ DE_FATAL("Unreachable");
}
}
else if (m_curToken == TOKEN_VERSION)
case CASESHADERTYPE_FRAGMENT: return "mediump";
default:
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
case CASETYPE_DEPENDENT: return "value = sin(value)";
default:
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
const string statements = m_caseType == CASETYPE_BUILT_IN_FUNCTIONS ? builtinFunctionsCaseStatements (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
: m_caseType == CASETYPE_ARRAY ? arrayCaseStatements (optimized, precision, isVertexCase)
: m_caseType == CASETYPE_STRUCT ? structCaseStatements (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
- : DE_NULL;
+ : deFatalStr("Invalid CaseType");
return defaultProgramData(m_caseShaderType, statements);
}
: m_caseType == CASETYPE_MULTIPLE_STATEMENTS ? multipleStatementsCaseStatements (optimized, precision, isVertexCase)
: m_caseType == CASETYPE_STATIC_BRANCH ? staticBranchCaseStatements (optimized, precision, isVertexCase)
: m_caseType == CASETYPE_LOOP ? loopCaseStatements (optimized, precision, isVertexCase)
- : DE_NULL;
+ : deFatalStr("Invalid CaseType");
return defaultProgramData(m_caseShaderType, statements);
}
: m_caseType == CASETYPE_UNUSED_VALUE_DEAD_BRANCH ? unusedValueDeadBranchCaseStatements (optimized, precision, isVertexCase)
: m_caseType == CASETYPE_UNUSED_VALUE_AFTER_RETURN ? unusedValueAfterReturnCaseStatements ()
: m_caseType == CASETYPE_UNUSED_VALUE_MUL_ZERO ? unusedValueMulZeroCaseStatements (optimized, precision, isVertexCase)
- : DE_NULL;
+ : deFatalStr("Invalid CaseType");
return defaultProgramData(m_caseShaderType, funcDefs, statements);
}
case CASESHADERTYPE_FRAGMENT: return "highp";
default:
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
case CASETYPE_DEPENDENT: return "value = sin(value)";
default:
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
const string statements = m_caseType == CASETYPE_BUILT_IN_FUNCTIONS ? builtinFunctionsCaseStatements (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
: m_caseType == CASETYPE_ARRAY ? arrayCaseStatements (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
: m_caseType == CASETYPE_STRUCT ? structCaseStatements (optimized, m_useConstantExpressionsOnly, precision, isVertexCase)
- : DE_NULL;
+ : deFatalStr("Invalid CaseType");
return defaultProgramData(m_caseShaderType, statements);
}
: m_caseType == CASETYPE_MULTIPLE_STATEMENTS ? multipleStatementsCaseStatements (optimized, precision, isVertexCase)
: m_caseType == CASETYPE_STATIC_BRANCH ? staticBranchCaseStatements (optimized, precision, isVertexCase)
: m_caseType == CASETYPE_LOOP ? loopCaseStatements (optimized, precision, isVertexCase)
- : DE_NULL;
+ : deFatalStr("Invalid CaseType");
return defaultProgramData(m_caseShaderType, statements);
}
: m_caseType == CASETYPE_UNUSED_VALUE_DEAD_BRANCH ? unusedValueDeadBranchCaseStatements (optimized, precision, isVertexCase)
: m_caseType == CASETYPE_UNUSED_VALUE_AFTER_RETURN ? unusedValueAfterReturnCaseStatements ()
: m_caseType == CASETYPE_UNUSED_VALUE_MUL_ZERO ? unusedValueMulZeroCaseStatements (optimized, precision, isVertexCase)
- : DE_NULL;
+ : deFatalStr("Invalid CaseType");
return defaultProgramData(m_caseShaderType, funcDefs, statements);
}
else
{
DE_ASSERT(DE_FALSE);
- return DE_NULL;
+ return "";
}
}
default:
DE_FATAL("Equation not supported.");
}
- return DE_NULL;
+ return "";
}
glw::GLenum getEquation (BlendEquation equation)
}
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
class ResourceNameBufferLimitCase : public TestCase
" imageStore(u_image, ivec2(gx, gy), " + colorExpr + ");\n"
: shaderImageType == TEXTURETYPE_3D || shaderImageType == TEXTURETYPE_CUBE || shaderImageType == TEXTURETYPE_2D_ARRAY ?
" imageStore(u_image, ivec3(gx, gy, gz), " + colorExpr + ");\n"
- : DE_NULL) +
+ : deFatalStr("Invalid TextureType")) +
"}\n"));
UniformAccessLogger uniforms(renderCtx.getFunctions(), log, program.getProgram());
: shaderImageType == TEXTURETYPE_3D || shaderImageType == TEXTURETYPE_CUBE || shaderImageType == TEXTURETYPE_2D_ARRAY ?
" ivec3 pos = ivec3(gl_GlobalInvocationID);\n"
" imageStore(u_image1, pos, imageLoad(u_image0, ivec3(" + toString(imageSize.x()-1) + "-pos.x, pos.y, pos.z)));\n"
- : DE_NULL) +
+ : deFatalStr("Invalid TextureType")) +
"}\n"));
UniformAccessLogger uniforms(renderCtx.getFunctions(), log, program.getProgram());
default:
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
" imageStore(u_returnValues, " + invocationCoord + ", " + colorVecTypeName + "(" + atomicInvocation + "));\n"
: m_caseType == ATOMIC_OPERATION_CASE_TYPE_END_RESULT ?
" " + atomicInvocation + ";\n"
- : DE_NULL) +
+ : deFatalStr("Invalid AtomicOperationCaseType")) +
"}\n"));
UniformAccessLogger uniforms(renderCtx.getFunctions(), log, program.getProgram());
const char* const imageAccessStr = imageAccess == ImageSizeCase::IMAGEACCESS_READ_ONLY ? "readonly"
: imageAccess == ImageSizeCase::IMAGEACCESS_WRITE_ONLY ? "writeonly"
: imageAccess == ImageSizeCase::IMAGEACCESS_READ_ONLY_WRITE_ONLY ? "readonly_writeonly"
- : DE_NULL;
+ : deFatalStr("Invalid ImageAccess");
for (int imageSizeNdx = 0; imageSizeNdx < DE_LENGTH_OF_ARRAY(baseImageSizes); imageSizeNdx++)
{
: imageType == TEXTURETYPE_CUBE ? toString(imageSize.x()) + "x" + toString(imageSize.y())
: imageType == TEXTURETYPE_3D ? toString(imageSize.x()) + "x" + toString(imageSize.y()) + "x" + toString(imageSize.z())
: imageType == TEXTURETYPE_2D_ARRAY ? toString(imageSize.x()) + "x" + toString(imageSize.y()) + "x" + toString(imageSize.z())
- : DE_NULL;
+ : deFatalStr("Invalid TextureType");
const string caseName = string() + imageAccessStr + "_" + sizeStr;
" gl_TessLevelOuter[1] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[1] + in_tc_tessParam[0]);\n"
" gl_TessLevelOuter[2] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[3] + in_tc_tessParam[1]);\n"
" gl_TessLevelOuter[3] = 1.0 + 59.0 * 0.5 * (in_tc_tessParam[2] + in_tc_tessParam[3]);\n"
- : DE_NULL) +
+ : deFatalStr("Invalid TessPrimitiveType")) +
"}\n");
std::string tessellationEvaluationTemplate ("${GLSL_VERSION_DECL}\n"
" highp vec2 c = (1.0-gl_TessCoord.x)*( gl_TessCoord.y)*in_te_position[2];\n"
" highp vec2 d = ( gl_TessCoord.x)*( gl_TessCoord.y)*in_te_position[3];\n"
" highp vec2 pos = a+b+c+d;\n"
- : DE_NULL) +
+ : deFatalStr("Invalid CaseType")) +
"\n"
" highp float f = sqrt(1.0 - 2.0 * max(abs(gl_TessCoord.x - 0.5), abs(gl_TessCoord.y - 0.5)))*0.5 + 0.5;\n"
" in_f_color = vec4(0.1, gl_TessCoord.xy*f, 1.0);\n"
- : DE_NULL) +
+ : deFatalStr("Invalid TessPrimitiveType")) +
"\n"
" // Offset the position slightly, based on the parity of the bits in the float representation.\n"
" // This is done to detect possible small differences in edge vertex positions between patches.\n"
else
{
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
}
currentIndex++;
}
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
string UserDefinedIOCase::IOBlock::basicSubobjectAtIndex (int subobjectIndex, int arraySize) const
}
}
DE_ASSERT(false);
- return DE_NULL;
+ return "";
}
// Used as the 'visit' argument for glslTraverseBasicTypes.
const string vertexAttrArrayInputSize = m_vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_IMPLICIT ? ""
: m_vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_EXPLICIT_SHADER_BUILTIN ? "gl_MaxPatchVertices"
: m_vertexIOArraySize == VERTEX_IO_ARRAY_SIZE_EXPLICIT_QUERY ? de::toString(m_context.getContextInfo().getInt(GL_MAX_PATCH_VERTICES))
- : DE_NULL;
+ : deFatalStr("Invalid VertexIOArraySize");
const char* const maybePatch = isPerPatchIO ? "patch " : "";
const string outMaybePatch = string() + maybePatch + "out ";