**/
std::string XFBTooSmallStrideTest::getShaderSource(GLuint test_case_index, Utils::Shader::STAGES stage)
{
- static const GLchar* array_var_definition = "layout (xfb_buffer = 0, xfb_stride = 32) out;\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ static const GLchar* array_var_definition = "layout (xfb_buffer = 0 /*, xfb_stride = 32 */ ) out;\n"
+#else
+ static const GLchar* array_var_definition = "layout (xfb_buffer = 0, xfb_stride = 32) out;\n"
+#endif /* DEBUG_NEG_REMOVE_ERROR */
"\n"
- "layout (xfb_offset = 16) out vec4 gohanARRAY[4];\n";
- static const GLchar* block_var_definition = "layout (xfb_buffer = 0, xfb_stride = 32) out;\n"
+ "layout (xfb_offset = 16) out vec4 gohan[4];\n";
+#if DEBUG_NEG_REMOVE_ERROR
+ static const GLchar* block_var_definition = "layout (xfb_buffer = 0 /*, xfb_stride = 32 */ ) out;\n"
+#else
+ static const GLchar* block_var_definition = "layout (xfb_buffer = 0, xfb_stride = 32) out;\n"
+#endif /* DEBUG_NEG_REMOVE_ERROR */
"\n"
"layout (xfb_offset = 0) out Goku {\n"
" vec4 gohan;\n"
" vec4 goten;\n"
" vec4 chichi;\n"
- "} gokuARRAY;\n";
+ "} goku;\n";
+#if DEBUG_NEG_REMOVE_ERROR
+ static const GLchar* offset_var_definition = "layout (xfb_buffer = 0 /*, xfb_stride = 40 */ ) out;\n"
+#else
static const GLchar* offset_var_definition = "layout (xfb_buffer = 0, xfb_stride = 40) out;\n"
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ "\n"
+ "layout (xfb_offset = 32) out vec4 gohan;\n";
+// The test considers gohan overflows the buffer 0, but according to spec, it is valid to declare the variable with qualifier "layout (xfb_offset = 16, xfb_stride = 32) out vec4 gohan;"
+// To make the shader failed to compile, change xfb_stride to a value that is smaller than 32
+#if DEBUG_NEG_REMOVE_ERROR
+ static const GLchar* stride_var_definition = "layout (xfb_buffer = 0 /*, xfb_stride = 28 */ ) out;\n"
"\n"
- "layout (xfb_offset = 32) out vec4 gohanARRAY;\n";
- // The test considers gohan overflows the buffer 0, but according to spec, it is valid to declare the variable with qualifier "layout (xfb_offset = 16, xfb_stride = 32) out vec4 gohan;"
- // To make the shader failed to compile, change xfb_stride to a value that is smaller than 32
+ "layout (xfb_offset = 16 /*, xfb_stride = 28 */ ) out vec4 gohan;\n";
+#else
static const GLchar* stride_var_definition = "layout (xfb_buffer = 0, xfb_stride = 28) out;\n"
"\n"
- "layout (xfb_offset = 16, xfb_stride = 28) out vec4 gohanARRAY;\n";
- static const GLchar* array_use = " gohanINDEX[0] = result / 2;\n"
- " gohanINDEX[1] = result / 4;\n"
- " gohanINDEX[2] = result / 6;\n"
- " gohanINDEX[3] = result / 8;\n";
- static const GLchar* block_use = " gokuINDEX.gohan = result / 2;\n"
- " gokuINDEX.goten = result / 4;\n"
- " gokuINDEX.chichi = result / 6;\n";
- static const GLchar* output_use = "gohanINDEX = result / 4;\n";
+ "layout (xfb_offset = 16, xfb_stride = 28) out vec4 gohan;\n";
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ static const GLchar* array_use = " gohan[0] = result / 2;\n"
+ " gohan[1] = result / 4;\n"
+ " gohan[2] = result / 6;\n"
+ " gohan[3] = result / 8;\n";
+ static const GLchar* block_use = " goku.gohan = result / 2;\n"
+ " goku.goten = result / 4;\n"
+ " goku.chichi = result / 6;\n";
+ static const GLchar* output_use = "gohan = result / 4;\n";
static const GLchar* fs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
- "in vec4 gs_fs;\n"
+ "in vec4 any_fs;\n"
"out vec4 fs_out;\n"
"\n"
"void main()\n"
"{\n"
- " fs_out = gs_fs;\n"
+ " fs_out = any_fs;\n"
"}\n"
"\n";
static const GLchar* gs_tested = "#version 430 core\n"
"\n"
"VAR_DEFINITION"
"\n"
- "in vec4 tes_gs[];\n"
- "out vec4 gs_fs;\n"
+ "in vec4 vs_any[];\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
- " vec4 result = tes_gs[0];\n"
+ " vec4 result = vs_any[0];\n"
"\n"
"VARIABLE_USE"
"\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, 1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, 1, 0, 1);\n"
" EmitVertex();\n"
"}\n"
"\n"
"layout(vertices = 1) out;\n"
"\n"
- "in vec4 vs_tcs[];\n"
+ "in vec4 vs_any[];\n"
"out vec4 tcs_tes[];\n"
"\n"
"void main()\n"
"{\n"
"\n"
- " tcs_tes[gl_InvocationID] = vs_tcs[gl_InvocationID];\n"
+ " tcs_tes[gl_InvocationID] = vs_any[gl_InvocationID];\n"
"\n"
" gl_TessLevelOuter[0] = 1.0;\n"
" gl_TessLevelOuter[1] = 1.0;\n"
" gl_TessLevelInner[1] = 1.0;\n"
"}\n"
"\n";
- static const GLchar* tcs_tested = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(vertices = 1) out;\n"
- "\n"
- "VAR_DEFINITION"
- "\n"
- "in vec4 vs_tcs[];\n"
- "out vec4 tcs_tes[];\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 result = vs_tcs[gl_InvocationID];\n"
- "\n"
- "VARIABLE_USE"
- "\n"
- " tcs_tes[gl_InvocationID] = result;\n"
- "\n"
- " gl_TessLevelOuter[0] = 1.0;\n"
- " gl_TessLevelOuter[1] = 1.0;\n"
- " gl_TessLevelOuter[2] = 1.0;\n"
- " gl_TessLevelOuter[3] = 1.0;\n"
- " gl_TessLevelInner[0] = 1.0;\n"
- " gl_TessLevelInner[1] = 1.0;\n"
- "}\n"
- "\n";
static const GLchar* tes_tested = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"VAR_DEFINITION"
"\n"
"in vec4 tcs_tes[];\n"
- "out vec4 tes_gs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " tes_gs += result;\n"
+ " any_fs += result;\n"
"}\n"
"\n";
static const GLchar* vs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 vs_any;\n"
"\n"
"void main()\n"
"{\n"
- " vs_tcs = in_vs;\n"
+ " vs_any = in_vs;\n"
"}\n"
"\n";
static const GLchar* vs_tested = "#version 430 core\n"
"VAR_DEFINITION"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " vs_tcs += result;\n"
+ " any_fs += result;\n"
"}\n"
"\n";
if (test_case.m_stage == stage)
{
- const GLchar* array = "";
- const GLchar* index = "";
size_t position = 0;
- size_t temp;
const GLchar* var_definition = 0;
const GLchar* var_use = 0;
{
case Utils::Shader::GEOMETRY:
source = gs_tested;
- array = "[]";
- index = "[0]";
- break;
- case Utils::Shader::TESS_CTRL:
- source = tcs_tested;
- array = "[]";
- index = "[gl_InvocationID]";
break;
case Utils::Shader::TESS_EVAL:
source = tes_tested;
- array = "[]";
- index = "[0]";
break;
case Utils::Shader::VERTEX:
source = vs_tested;
TCU_FAIL("Invalid enum");
}
- temp = position;
Utils::replaceToken("VAR_DEFINITION", position, var_definition, source);
- position = temp;
- Utils::replaceToken("ARRAY", position, array, source);
+ position = 0;
Utils::replaceToken("VARIABLE_USE", position, var_use, source);
-
- Utils::replaceAllTokens("INDEX", index, source);
}
else
{
source = "";
}
break;
- case Utils::Shader::TESS_CTRL:
- switch (stage)
- {
- case Utils::Shader::FRAGMENT:
- source = fs;
- break;
- case Utils::Shader::VERTEX:
- source = vs;
- break;
- default:
- source = "";
- }
- break;
case Utils::Shader::TESS_EVAL:
switch (stage)
{
"layout (xfb_buffer = 3, xfb_stride = valid_stride) out;\n"
"\n"
"\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ "layout (stream = 0, xfb_buffer = 1, xfb_offset = 48) out vec4 goku;\n"
+ "layout (stream = 1, xfb_buffer = 3, xfb_offset = 32) out vec4 gohan;\n"
+ "layout (stream = 2, xfb_buffer = 2, xfb_offset = 16) out vec4 goten;\n";
+#else
"layout (stream = 0, xfb_buffer = 1, xfb_offset = 48) out vec4 goku;\n"
"layout (stream = 1, xfb_buffer = 1, xfb_offset = 32) out vec4 gohan;\n"
"layout (stream = 2, xfb_buffer = 1, xfb_offset = 16) out vec4 goten;\n";
+#endif /* DEBUG_NEG_REMOVE_ERROR */
static const GLchar* var_use = " goku = result / 2;\n"
" gohan = result / 4;\n"
" goten = result / 6;\n";
"\n"
"VAR_DEFINITION"
"\n"
- "in vec4 tes_gs[];\n"
+ "in vec4 vs_gs[];\n"
"out vec4 gs_fs;\n"
"\n"
"void main()\n"
"{\n"
- " vec4 result = tes_gs[0];\n"
+ " vec4 result = vs_gs[0];\n"
"\n"
"VARIABLE_USE"
"\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 vs_gs;\n"
"\n"
"void main()\n"
"{\n"
- " vs_tcs = in_vs;\n"
+ " vs_gs = in_vs;\n"
"}\n"
"\n";
**/
std::string XFBExceedBufferLimitTest::getShaderSource(GLuint test_case_index, Utils::Shader::STAGES stage)
{
- static const GLchar* block_var_definition = "const uint buffer_index = BUFFER;\n"
+ static const GLchar* block_var_definition = "const uint buffer_index = MAX_BUFFER;\n"
"\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ "layout (xfb_buffer = 0, xfb_offset = 0) out Goku {\n"
+#else
"layout (xfb_buffer = buffer_index, xfb_offset = 0) out Goku {\n"
+#endif /* DEBUG_NEG_REMOVE_ERROR */
" vec4 member;\n"
- "} gokuARRAY;\n";
- static const GLchar* global_var_definition = "const uint buffer_index = BUFFER;\n"
+ "} goku;\n";
+ static const GLchar* global_var_definition = "const uint buffer_index = MAX_BUFFER;\n"
"\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ "layout (xfb_buffer = 0) out;\n";
+#else
"layout (xfb_buffer = buffer_index) out;\n";
- static const GLchar* vector_var_definition = "const uint buffer_index = BUFFER;\n"
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ static const GLchar* vector_var_definition = "const uint buffer_index = MAX_BUFFER;\n"
"\n"
- "layout (xfb_buffer = buffer_index) out vec4 gokuARRAY;\n";
- static const GLchar* block_use = " gokuINDEX.member = result / 2;\n";
+#if DEBUG_NEG_REMOVE_ERROR
+ "layout (xfb_buffer = 0) out vec4 goku;\n";
+#else
+ "layout (xfb_buffer = buffer_index) out vec4 goku;\n";
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ static const GLchar* block_use = " goku.member = result / 2;\n";
static const GLchar* global_use = "";
- static const GLchar* vector_use = " gokuINDEX = result / 2;\n";
+ static const GLchar* vector_use = " goku = result / 2;\n";
static const GLchar* fs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
- "in vec4 gs_fs;\n"
+ "in vec4 any_fs;\n"
"out vec4 fs_out;\n"
"\n"
"void main()\n"
"{\n"
- " fs_out = gs_fs;\n"
+ " fs_out = any_fs;\n"
"}\n"
"\n";
static const GLchar* gs_tested = "#version 430 core\n"
"\n"
"VAR_DEFINITION"
"\n"
- "in vec4 tes_gs[];\n"
- "out vec4 gs_fs;\n"
+ "in vec4 vs_any[];\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
- " vec4 result = tes_gs[0];\n"
+ " vec4 result = vs_any[0];\n"
"\n"
"VARIABLE_USE"
"\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, 1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, 1, 0, 1);\n"
" EmitVertex();\n"
"}\n"
"\n"
"layout(vertices = 1) out;\n"
"\n"
- "in vec4 vs_tcs[];\n"
+ "in vec4 vs_any[];\n"
"out vec4 tcs_tes[];\n"
"\n"
"void main()\n"
"{\n"
"\n"
- " tcs_tes[gl_InvocationID] = vs_tcs[gl_InvocationID];\n"
+ " tcs_tes[gl_InvocationID] = vs_any[gl_InvocationID];\n"
"\n"
" gl_TessLevelOuter[0] = 1.0;\n"
" gl_TessLevelOuter[1] = 1.0;\n"
" gl_TessLevelInner[1] = 1.0;\n"
"}\n"
"\n";
- static const GLchar* tcs_tested = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(vertices = 1) out;\n"
- "\n"
- "VAR_DEFINITION"
- "\n"
- "in vec4 vs_tcs[];\n"
- "out vec4 tcs_tes[];\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 result = vs_tcs[gl_InvocationID];\n"
- "\n"
- "VARIABLE_USE"
- "\n"
- " tcs_tes[gl_InvocationID] = result;\n"
- "\n"
- " gl_TessLevelOuter[0] = 1.0;\n"
- " gl_TessLevelOuter[1] = 1.0;\n"
- " gl_TessLevelOuter[2] = 1.0;\n"
- " gl_TessLevelOuter[3] = 1.0;\n"
- " gl_TessLevelInner[0] = 1.0;\n"
- " gl_TessLevelInner[1] = 1.0;\n"
- "}\n"
- "\n";
static const GLchar* tes_tested = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"VAR_DEFINITION"
"\n"
"in vec4 tcs_tes[];\n"
- "out vec4 tes_gs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " tes_gs += result;\n"
+ " any_fs += result;\n"
"}\n"
"\n";
static const GLchar* vs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 vs_any;\n"
"\n"
"void main()\n"
"{\n"
- " vs_tcs = in_vs;\n"
+ " vs_any = in_vs;\n"
"}\n"
"\n";
static const GLchar* vs_tested = "#version 430 core\n"
"VAR_DEFINITION"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " vs_tcs = result;\n"
+ " any_fs = result;\n"
"}\n"
"\n";
if (test_case.m_stage == stage)
{
- const GLchar* array = "";
GLchar buffer[16];
const Functions& gl = m_context.getRenderContext().getFunctions();
- const GLchar* index = "";
GLint max_n_xfb = 0;
size_t position = 0;
- size_t temp;
const GLchar* var_definition = 0;
const GLchar* var_use = 0;
{
case Utils::Shader::GEOMETRY:
source = gs_tested;
- array = "[]";
- index = "[0]";
- break;
- case Utils::Shader::TESS_CTRL:
- source = tcs_tested;
- array = "[]";
- index = "[gl_InvocationID]";
break;
case Utils::Shader::TESS_EVAL:
source = tes_tested;
- array = "[]";
- index = "[0]";
break;
case Utils::Shader::VERTEX:
source = vs_tested;
TCU_FAIL("Invalid enum");
}
- temp = position;
Utils::replaceToken("VAR_DEFINITION", position, var_definition, source);
- position = temp;
- Utils::replaceToken("BUFFER", position, buffer, source);
- if (GLOBAL != test_case.m_case)
- {
- Utils::replaceToken("ARRAY", position, array, source);
- }
+ position = 0;
+ Utils::replaceToken("MAX_BUFFER", position, buffer, source);
Utils::replaceToken("VARIABLE_USE", position, var_use, source);
-
- Utils::replaceAllTokens("INDEX", index, source);
}
else
{
source = "";
}
break;
- case Utils::Shader::TESS_CTRL:
- switch (stage)
- {
- case Utils::Shader::FRAGMENT:
- source = fs;
- break;
- case Utils::Shader::VERTEX:
- source = vs;
- break;
- default:
- source = "";
- }
- break;
case Utils::Shader::TESS_EVAL:
switch (stage)
{
**/
std::string XFBExceedOffsetLimitTest::getShaderSource(GLuint test_case_index, Utils::Shader::STAGES stage)
{
- static const GLchar* block_var_definition = "const uint max_size = SIZE;\n"
+ static const GLchar* block_var_definition = "const uint overflow_offset = MAX_SIZE + 16;\n"
"\n"
- "layout (xfb_buffer = 0, xfb_offset = max_size + 16) out Goku {\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ "layout (xfb_buffer = 0, xfb_offset = 0) out Goku {\n"
+#else
+ "layout (xfb_buffer = 0, xfb_offset = overflow_offset + 16) out Goku "
+ "{\n"
+#endif /* DEBUG_NEG_REMOVE_ERROR */
" vec4 member;\n"
- "} gokuARRAY;\n";
- static const GLchar* global_var_definition = "const uint max_size = SIZE;\n"
+ "} goku;\n";
+ static const GLchar* global_var_definition = "const uint overflow_offset = MAX_SIZE + 16;\n"
"\n"
- "layout (xfb_buffer = 0, xfb_stride = max_size + 16) out;\n";
- static const GLchar* vector_var_definition =
- "const uint max_size = SIZE;\n"
- "\n"
- "layout (xfb_buffer = 0, xfb_offset = max_size + 16) out vec4 gokuARRAY;\n";
- static const GLchar* block_use = " gokuINDEX.member = result / 2;\n";
+#if DEBUG_NEG_REMOVE_ERROR
+ "layout (xfb_buffer = 0, xfb_stride = 0) out;\n";
+#else
+ "layout (xfb_buffer = 0, xfb_stride = overflow_offset) out;\n";
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ static const GLchar* vector_var_definition = "const uint overflow_offset = MAX_SIZE + 16;\n"
+ "\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ "layout (xfb_buffer = 0, xfb_offset = 0) out vec4 goku;\n";
+#else
+ "layout (xfb_buffer = 0, xfb_offset = overflow_offset) out vec4 "
+ "goku;\n";
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ static const GLchar* block_use = " goku.member = result / 2;\n";
static const GLchar* global_use = "";
- static const GLchar* vector_use = " gokuINDEX = result / 2;\n";
+ static const GLchar* vector_use = " goku = result / 2;\n";
static const GLchar* fs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
- "in vec4 gs_fs;\n"
+ "in vec4 any_fs;\n"
"out vec4 fs_out;\n"
"\n"
"void main()\n"
"{\n"
- " fs_out = gs_fs;\n"
+ " fs_out = any_fs;\n"
"}\n"
"\n";
static const GLchar* gs_tested = "#version 430 core\n"
"\n"
"VAR_DEFINITION"
"\n"
- "in vec4 tes_gs[];\n"
- "out vec4 gs_fs;\n"
+ "in vec4 vs_any[];\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
- " vec4 result = tes_gs[0];\n"
+ " vec4 result = vs_any[0];\n"
"\n"
"VARIABLE_USE"
"\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, 1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, 1, 0, 1);\n"
" EmitVertex();\n"
"}\n"
"\n"
"layout(vertices = 1) out;\n"
"\n"
- "in vec4 vs_tcs[];\n"
+ "in vec4 vs_any[];\n"
"out vec4 tcs_tes[];\n"
"\n"
"void main()\n"
"{\n"
"\n"
- " tcs_tes[gl_InvocationID] = vs_tcs[gl_InvocationID];\n"
+ " tcs_tes[gl_InvocationID] = vs_any[gl_InvocationID];\n"
"\n"
" gl_TessLevelOuter[0] = 1.0;\n"
" gl_TessLevelOuter[1] = 1.0;\n"
" gl_TessLevelInner[1] = 1.0;\n"
"}\n"
"\n";
- static const GLchar* tcs_tested = "#version 430 core\n"
+ static const GLchar* tes_tested = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
- "layout(vertices = 1) out;\n"
+ "layout(isolines, point_mode) in;\n"
"\n"
"VAR_DEFINITION"
"\n"
- "in vec4 vs_tcs[];\n"
- "out vec4 tcs_tes[];\n"
+ "in vec4 tcs_tes[];\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
- " vec4 result = vs_tcs[gl_InvocationID];\n"
+ " vec4 result = tcs_tes[0];\n"
"\n"
"VARIABLE_USE"
"\n"
- " tcs_tes[gl_InvocationID] = result;\n"
- "\n"
- " gl_TessLevelOuter[0] = 1.0;\n"
- " gl_TessLevelOuter[1] = 1.0;\n"
- " gl_TessLevelOuter[2] = 1.0;\n"
- " gl_TessLevelOuter[3] = 1.0;\n"
- " gl_TessLevelInner[0] = 1.0;\n"
- " gl_TessLevelInner[1] = 1.0;\n"
- "}\n"
- "\n";
- static const GLchar* tes_tested = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(isolines, point_mode) in;\n"
- "\n"
- "VAR_DEFINITION"
- "\n"
- "in vec4 tcs_tes[];\n"
- "out vec4 tes_gs;\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 result = tcs_tes[0];\n"
- "\n"
- "VARIABLE_USE"
- "\n"
- " tes_gs += result;\n"
+ " any_fs += result;\n"
"}\n"
"\n";
static const GLchar* vs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 vs_any;\n"
"\n"
"void main()\n"
"{\n"
- " vs_tcs = in_vs;\n"
+ " vs_any = in_vs;\n"
"}\n"
"\n";
static const GLchar* vs_tested = "#version 430 core\n"
"VAR_DEFINITION"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " vs_tcs = result;\n"
+ " any_fs = result;\n"
"}\n"
"\n";
if (test_case.m_stage == stage)
{
- const GLchar* array = "";
GLchar buffer[16];
const Functions& gl = m_context.getRenderContext().getFunctions();
- const GLchar* index = "";
GLint max_n_xfb_comp = 0;
GLint max_n_xfb_bytes = 0;
size_t position = 0;
- size_t temp;
const GLchar* var_definition = 0;
const GLchar* var_use = 0;
default:
TCU_FAIL("Invalid enum");
}
- // It is a compile time error to apply xfb_offset to the declaration of an unsized array(GLSL4.5 spec: Page73)
- // change array = "[]" to "[1]"
+
switch (stage)
{
case Utils::Shader::GEOMETRY:
source = gs_tested;
- array = "[1]";
- index = "[0]";
- break;
- case Utils::Shader::TESS_CTRL:
- source = tcs_tested;
- array = "[1]";
- index = "[gl_InvocationID]";
break;
case Utils::Shader::TESS_EVAL:
source = tes_tested;
- array = "[1]";
- index = "[0]";
break;
case Utils::Shader::VERTEX:
source = vs_tested;
TCU_FAIL("Invalid enum");
}
- temp = position;
Utils::replaceToken("VAR_DEFINITION", position, var_definition, source);
- position = temp;
- Utils::replaceToken("SIZE", position, buffer, source);
- if (GLOBAL != test_case.m_case)
- {
- Utils::replaceToken("ARRAY", position, array, source);
- }
+ position = 0;
+ Utils::replaceToken("MAX_SIZE", position, buffer, source);
Utils::replaceToken("VARIABLE_USE", position, var_use, source);
-
- Utils::replaceAllTokens("INDEX", index, source);
}
else
{
source = "";
}
break;
- case Utils::Shader::TESS_CTRL:
- switch (stage)
- {
- case Utils::Shader::FRAGMENT:
- source = fs;
- break;
- case Utils::Shader::VERTEX:
- source = vs;
- break;
- default:
- source = "";
- }
- break;
case Utils::Shader::TESS_EVAL:
switch (stage)
{
{
static const GLchar* var_definition = "layout (xfb_offset = 0) out Goku {\n"
" vec4 gohan;\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ " /* layout (xfb_buffer = 1) */ vec4 goten;\n"
+#else
" layout (xfb_buffer = 1) vec4 goten;\n"
- "} gokuARRAY;\n";
- static const GLchar* var_use = " gokuINDEX.gohan = result / 2;\n"
- " gokuINDEX.goten = result / 4;\n";
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ "} goku;\n";
+ static const GLchar* var_use = " goku.gohan = result / 2;\n"
+ " goku.goten = result / 4;\n";
static const GLchar* fs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
- "in vec4 gs_fs;\n"
+ "in vec4 any_fs;\n"
"out vec4 fs_out;\n"
"\n"
"void main()\n"
"{\n"
- " fs_out = gs_fs;\n"
+ " fs_out = any_fs;\n"
"}\n"
"\n";
static const GLchar* gs_tested = "#version 430 core\n"
"\n"
"VAR_DEFINITION"
"\n"
- "in vec4 tes_gs[];\n"
- "out vec4 gs_fs;\n"
+ "in vec4 vs_any[];\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
- " vec4 result = tes_gs[0];\n"
+ " vec4 result = vs_any[0];\n"
"\n"
"VARIABLE_USE"
"\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, 1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, 1, 0, 1);\n"
" EmitVertex();\n"
"}\n"
"\n"
"layout(vertices = 1) out;\n"
"\n"
- "in vec4 vs_tcs[];\n"
+ "in vec4 vs_any[];\n"
"out vec4 tcs_tes[];\n"
"\n"
"void main()\n"
"{\n"
"\n"
- " tcs_tes[gl_InvocationID] = vs_tcs[gl_InvocationID];\n"
+ " tcs_tes[gl_InvocationID] = vs_any[gl_InvocationID];\n"
"\n"
" gl_TessLevelOuter[0] = 1.0;\n"
" gl_TessLevelOuter[1] = 1.0;\n"
" gl_TessLevelInner[1] = 1.0;\n"
"}\n"
"\n";
- static const GLchar* tcs_tested = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(vertices = 1) out;\n"
- "\n"
- "VAR_DEFINITION"
- "\n"
- "in vec4 vs_tcs[];\n"
- "out vec4 tcs_tes[];\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 result = vs_tcs[gl_InvocationID];\n"
- "\n"
- "VARIABLE_USE"
- "\n"
- " tcs_tes[gl_InvocationID] = result;\n"
- "\n"
- " gl_TessLevelOuter[0] = 1.0;\n"
- " gl_TessLevelOuter[1] = 1.0;\n"
- " gl_TessLevelOuter[2] = 1.0;\n"
- " gl_TessLevelOuter[3] = 1.0;\n"
- " gl_TessLevelInner[0] = 1.0;\n"
- " gl_TessLevelInner[1] = 1.0;\n"
- "}\n"
- "\n";
static const GLchar* tes_tested = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"VAR_DEFINITION"
"\n"
"in vec4 tcs_tes[];\n"
- "out vec4 tes_gs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " tes_gs += result;\n"
+ " any_fs += result;\n"
"}\n"
"\n";
static const GLchar* vs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 vs_any;\n"
"\n"
"void main()\n"
"{\n"
- " vs_tcs = in_vs;\n"
+ " vs_any = in_vs;\n"
"}\n"
"\n";
static const GLchar* vs_tested = "#version 430 core\n"
"VAR_DEFINITION"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " vs_tcs = result;\n"
+ " any_fs = result;\n"
"}\n"
"\n";
if (test_case.m_stage == stage)
{
- const GLchar* array = "";
- const GLchar* index = "";
size_t position = 0;
switch (stage)
{
case Utils::Shader::GEOMETRY:
source = gs_tested;
- array = "[]";
- index = "[0]";
- break;
- case Utils::Shader::TESS_CTRL:
- source = tcs_tested;
- array = "[]";
- index = "[gl_InvocationID]";
break;
case Utils::Shader::TESS_EVAL:
source = tes_tested;
- array = "[]";
- index = "[0]";
break;
case Utils::Shader::VERTEX:
source = vs_tested;
Utils::replaceToken("VAR_DEFINITION", position, var_definition, source);
position = 0;
- Utils::replaceToken("ARRAY", position, array, source);
Utils::replaceToken("VARIABLE_USE", position, var_use, source);
-
- Utils::replaceAllTokens("INDEX", index, source);
}
else
{
source = "";
}
break;
- case Utils::Shader::TESS_CTRL:
- switch (stage)
- {
- case Utils::Shader::FRAGMENT:
- source = fs;
- break;
- case Utils::Shader::VERTEX:
- source = vs;
- break;
- default:
- source = "";
- }
- break;
case Utils::Shader::TESS_EVAL:
switch (stage)
{
**/
std::string XFBOutputOverlappingTest::getShaderSource(GLuint test_case_index, Utils::Shader::STAGES stage)
{
- static const GLchar* var_definition = "layout (xfb_offset = OFFSET) out TYPE gohanARRAY;\n"
- "layout (xfb_offset = OFFSET) out TYPE gotenARRAY;\n";
- static const GLchar* var_use = " gohanINDEX = TYPE(0);\n"
- " gotenINDEX = TYPE(1);\n"
+ static const GLchar* var_definition = "layout (xfb_offset = 0) out TYPE gohan;\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ "/* layout (xfb_offset = OFFSET) */ out TYPE goten;\n";
+#else
+ "layout (xfb_offset = OFFSET) out TYPE goten;\n";
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ static const GLchar* var_use = " gohan = TYPE(0);\n"
+ " goten = TYPE(1);\n"
" if (vec4(0) == result)\n"
" {\n"
- " gohanINDEX = TYPE(1);\n"
- " gotenINDEX = TYPE(0);\n"
+ " gohan = TYPE(1);\n"
+ " goten = TYPE(0);\n"
" }\n";
static const GLchar* fs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
- "in vec4 gs_fs;\n"
+ "in vec4 any_fs;\n"
"out vec4 fs_out;\n"
"\n"
"void main()\n"
"{\n"
- " fs_out = gs_fs;\n"
+ " fs_out = any_fs;\n"
"}\n"
"\n";
static const GLchar* gs_tested = "#version 430 core\n"
"\n"
"VAR_DEFINITION"
"\n"
- "in vec4 tes_gs[];\n"
- "out vec4 gs_fs;\n"
+ "in vec4 vs_any[];\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
- " vec4 result = tes_gs[0];\n"
+ " vec4 result = vs_any[0];\n"
"\n"
"VARIABLE_USE"
"\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, 1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, 1, 0, 1);\n"
" EmitVertex();\n"
"}\n"
"\n"
"layout(vertices = 1) out;\n"
"\n"
- "in vec4 vs_tcs[];\n"
+ "in vec4 vs_any[];\n"
"out vec4 tcs_tes[];\n"
"\n"
"void main()\n"
"{\n"
"\n"
- " tcs_tes[gl_InvocationID] = vs_tcs[gl_InvocationID];\n"
+ " tcs_tes[gl_InvocationID] = vs_any[gl_InvocationID];\n"
"\n"
" gl_TessLevelOuter[0] = 1.0;\n"
" gl_TessLevelOuter[1] = 1.0;\n"
" gl_TessLevelInner[1] = 1.0;\n"
"}\n"
"\n";
- static const GLchar* tcs_tested = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(vertices = 1) out;\n"
- "\n"
- "VAR_DEFINITION"
- "\n"
- "in vec4 vs_tcs[];\n"
- "out vec4 tcs_tes[];\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 result = vs_tcs[gl_InvocationID];\n"
- "\n"
- "VARIABLE_USE"
- "\n"
- " tcs_tes[gl_InvocationID] = result;\n"
- "\n"
- " gl_TessLevelOuter[0] = 1.0;\n"
- " gl_TessLevelOuter[1] = 1.0;\n"
- " gl_TessLevelOuter[2] = 1.0;\n"
- " gl_TessLevelOuter[3] = 1.0;\n"
- " gl_TessLevelInner[0] = 1.0;\n"
- " gl_TessLevelInner[1] = 1.0;\n"
- "}\n"
- "\n";
static const GLchar* tes_tested = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"VAR_DEFINITION"
"\n"
"in vec4 tcs_tes[];\n"
- "out vec4 tes_gs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " tes_gs += result;\n"
+ " any_fs += result;\n"
"}\n"
"\n";
static const GLchar* vs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 vs_any;\n"
"\n"
"void main()\n"
"{\n"
- " vs_tcs = in_vs;\n"
+ " vs_any = in_vs;\n"
"}\n"
"\n";
static const GLchar* vs_tested = "#version 430 core\n"
"VAR_DEFINITION"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " vs_tcs = result;\n"
+ " any_fs = result;\n"
"}\n"
"\n";
if (test_case.m_stage == stage)
{
- const GLchar* array = "";
- GLchar buffer_gohan[16];
- GLchar buffer_goten[16];
- const GLchar* index = "";
+ GLchar offset[16];
size_t position = 0;
- size_t position_start = 0;
const GLchar* type_name = test_case.m_type.GetGLSLTypeName();
- sprintf(buffer_gohan, "%d", test_case.m_offset_gohan);
- sprintf(buffer_goten, "%d", test_case.m_offset_goten);
+ sprintf(offset, "%d", test_case.m_offset);
switch (stage)
{
case Utils::Shader::GEOMETRY:
source = gs_tested;
- array = "[]";
- index = "[0]";
- break;
- case Utils::Shader::TESS_CTRL:
- source = tcs_tested;
- array = "[]";
- index = "[gl_InvocationID]";
break;
case Utils::Shader::TESS_EVAL:
source = tes_tested;
- array = "[]";
- index = "[0]";
break;
case Utils::Shader::VERTEX:
source = vs_tested;
Utils::replaceToken("VAR_DEFINITION", position, var_definition, source);
position = 0;
- Utils::replaceToken("OFFSET", position, buffer_gohan, source);
- Utils::replaceToken("TYPE", position, type_name, source);
- Utils::replaceToken("ARRAY", position, array, source);
- Utils::replaceToken("OFFSET", position, buffer_goten, source);
- Utils::replaceToken("TYPE", position, type_name, source);
- Utils::replaceToken("ARRAY", position, array, source);
- position_start = position;
+ Utils::replaceToken("OFFSET", position, offset, source);
Utils::replaceToken("VARIABLE_USE", position, var_use, source);
- position = position_start;
- Utils::replaceToken("INDEX", position, index, source);
- Utils::replaceToken("TYPE", position, type_name, source);
- Utils::replaceToken("INDEX", position, index, source);
- Utils::replaceToken("TYPE", position, type_name, source);
- Utils::replaceToken("INDEX", position, index, source);
- Utils::replaceToken("TYPE", position, type_name, source);
- Utils::replaceToken("INDEX", position, index, source);
- Utils::replaceToken("TYPE", position, type_name, source);
+
+ Utils::replaceAllTokens("TYPE", type_name, source);
}
else
{
source = "";
}
break;
- case Utils::Shader::TESS_CTRL:
- switch (stage)
- {
- case Utils::Shader::FRAGMENT:
- source = fs;
- break;
- case Utils::Shader::VERTEX:
- source = vs;
- break;
- default:
- source = "";
- }
- break;
case Utils::Shader::TESS_EVAL:
switch (stage)
{
testCase& test_case = m_test_cases[test_case_index];
stream << "Stage: " << Utils::Shader::GetStageName(test_case.m_stage)
- << ", type: " << test_case.m_type.GetGLSLTypeName() << ", offsets: " << test_case.m_offset_gohan << " & "
- << test_case.m_offset_goten;
+ << ", type: " << test_case.m_type.GetGLSLTypeName() << ", offset: " << test_case.m_offset;
return stream.str();
}
for (GLuint i = 0; i < n_types; ++i)
{
const Utils::Type& type = getType(i);
- const GLuint base_alingment = Utils::Type::GetTypeSize(type.m_basic_type);
+ const GLuint basic_type_size = Utils::Type::GetTypeSize(type.m_basic_type);
/* Skip scalars, not applicable as:
*
continue;
}
- testCase test_case = { 0 /* gohan offset */, base_alingment /* goten_offset */,
- (Utils::Shader::STAGES)stage, type };
+ testCase test_case = { basic_type_size /* offset */, (Utils::Shader::STAGES)stage, type };
m_test_cases.push_back(test_case);
}
**/
std::string XFBInvalidOffsetAlignmentTest::getShaderSource(GLuint test_case_index, Utils::Shader::STAGES stage)
{
- static const GLchar* var_definition = "layout (xfb_offset = OFFSET) out TYPE gohanARRAY;\n";
- static const GLchar* var_use = " gohanINDEX = TYPE(0);\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ static const GLchar* var_definition = "/* layout (xfb_offset = OFFSET) */ out TYPE gohan;\n";
+#else
+ static const GLchar* var_definition = "layout (xfb_offset = OFFSET) out TYPE gohan;\n";
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ static const GLchar* var_use = " gohan = TYPE(0);\n"
" if (vec4(0) == result)\n"
" {\n"
- " gohanINDEX = TYPE(1);\n"
+ " gohan = TYPE(1);\n"
" }\n";
static const GLchar* fs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
- "in vec4 gs_fs;\n"
+ "in vec4 any_fs;\n"
"out vec4 fs_out;\n"
"\n"
"void main()\n"
"{\n"
- " fs_out = gs_fs;\n"
+ " fs_out = any_fs;\n"
"}\n"
"\n";
static const GLchar* gs_tested = "#version 430 core\n"
"\n"
"VAR_DEFINITION"
"\n"
- "in vec4 tes_gs[];\n"
- "out vec4 gs_fs;\n"
+ "in vec4 vs_any[];\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
- " vec4 result = tes_gs[0];\n"
+ " vec4 result = vs_any[0];\n"
"\n"
"VARIABLE_USE"
"\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(-1, 1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, -1, 0, 1);\n"
" EmitVertex();\n"
- " gs_fs = result;\n"
+ " any_fs = result;\n"
" gl_Position = vec4(1, 1, 0, 1);\n"
" EmitVertex();\n"
"}\n"
"\n"
"layout(vertices = 1) out;\n"
"\n"
- "in vec4 vs_tcs[];\n"
+ "in vec4 vs_any[];\n"
"out vec4 tcs_tes[];\n"
"\n"
"void main()\n"
"{\n"
"\n"
- " tcs_tes[gl_InvocationID] = vs_tcs[gl_InvocationID];\n"
+ " tcs_tes[gl_InvocationID] = vs_any[gl_InvocationID];\n"
"\n"
" gl_TessLevelOuter[0] = 1.0;\n"
" gl_TessLevelOuter[1] = 1.0;\n"
" gl_TessLevelInner[1] = 1.0;\n"
"}\n"
"\n";
- static const GLchar* tcs_tested = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(vertices = 1) out;\n"
- "\n"
- "VAR_DEFINITION"
- "\n"
- "in vec4 vs_tcs[];\n"
- "out vec4 tcs_tes[];\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 result = vs_tcs[gl_InvocationID];\n"
- "\n"
- "VARIABLE_USE"
- "\n"
- " tcs_tes[gl_InvocationID] = result;\n"
- "\n"
- " gl_TessLevelOuter[0] = 1.0;\n"
- " gl_TessLevelOuter[1] = 1.0;\n"
- " gl_TessLevelOuter[2] = 1.0;\n"
- " gl_TessLevelOuter[3] = 1.0;\n"
- " gl_TessLevelInner[0] = 1.0;\n"
- " gl_TessLevelInner[1] = 1.0;\n"
- "}\n"
- "\n";
static const GLchar* tes_tested = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"VAR_DEFINITION"
"\n"
"in vec4 tcs_tes[];\n"
- "out vec4 tes_gs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " tes_gs += result;\n"
+ " any_fs += result;\n"
"}\n"
"\n";
static const GLchar* vs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 vs_any;\n"
"\n"
"void main()\n"
"{\n"
- " vs_tcs = in_vs;\n"
+ " vs_any = in_vs;\n"
"}\n"
"\n";
static const GLchar* vs_tested = "#version 430 core\n"
"VAR_DEFINITION"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " vs_tcs = result;\n"
+ " any_fs = result;\n"
"}\n"
"\n";
if (test_case.m_stage == stage)
{
- const GLchar* array = "";
- GLchar buffer[16];
- const GLchar* index = "";
+ GLchar offset[16];
size_t position = 0;
- size_t position_start = 0;
const GLchar* type_name = test_case.m_type.GetGLSLTypeName();
- sprintf(buffer, "%d", test_case.m_offset);
+ sprintf(offset, "%d", test_case.m_offset);
switch (stage)
{
case Utils::Shader::GEOMETRY:
source = gs_tested;
- array = "[]";
- index = "[0]";
- break;
- case Utils::Shader::TESS_CTRL:
- source = tcs_tested;
- array = "[]";
- index = "[gl_InvocationID]";
break;
case Utils::Shader::TESS_EVAL:
source = tes_tested;
- array = "[]";
- index = "[0]";
break;
case Utils::Shader::VERTEX:
source = vs_tested;
Utils::replaceToken("VAR_DEFINITION", position, var_definition, source);
position = 0;
- Utils::replaceToken("OFFSET", position, buffer, source);
- Utils::replaceToken("TYPE", position, type_name, source);
- Utils::replaceToken("ARRAY", position, array, source);
- position_start = position;
+ Utils::replaceToken("OFFSET", position, offset, source);
Utils::replaceToken("VARIABLE_USE", position, var_use, source);
- position = position_start;
- Utils::replaceToken("INDEX", position, index, source);
- Utils::replaceToken("TYPE", position, type_name, source);
- Utils::replaceToken("INDEX", position, index, source);
- Utils::replaceToken("TYPE", position, type_name, source);
+
+ Utils::replaceAllTokens("TYPE", type_name, source);
}
else
{
source = "";
}
break;
- case Utils::Shader::TESS_CTRL:
- switch (stage)
- {
- case Utils::Shader::FRAGMENT:
- source = fs;
- break;
- case Utils::Shader::VERTEX:
- source = vs;
- break;
- default:
- source = "";
- }
- break;
case Utils::Shader::TESS_EVAL:
switch (stage)
{
for (GLuint i = 0; i < n_types; ++i)
{
const Utils::Type& type = getType(i);
- const GLuint base_alingment = Utils::Type::GetTypeSize(type.m_basic_type);
+ const GLuint basic_type_size = Utils::Type::GetTypeSize(type.m_basic_type);
for (GLuint stage = 0; stage < Utils::Shader::STAGE_MAX; ++stage)
{
continue;
}
- for (GLuint offset = base_alingment + 1; offset < 2 * base_alingment; ++offset)
+ for (GLuint offset = basic_type_size + 1; offset < 2 * basic_type_size; ++offset)
{
testCase test_case = { offset, (Utils::Shader::STAGES)stage, type };
**/
std::string XFBCaptureUnsizedArrayTest::getShaderSource(GLuint test_case_index, Utils::Shader::STAGES stage)
{
- static const GLchar* var_definition = "layout (xfb_offset = 0) out vec4 gokuARRAY[];\n";
- static const GLchar* var_use = " gokuINDEX[0] = result / 2;\n";
- static const GLchar* fs = "#version 430 core\n"
+#if DEBUG_NEG_REMOVE_ERROR
+ static const GLchar* var_definition = "/* layout (xfb_offset = 0) */ out vec4 goku[];\n";
+#else
+ static const GLchar* var_definition = "layout (xfb_offset = 0) out vec4 goku[];\n";
+#endif /* DEBUG_NEG_REMOVE_ERROR */
+ static const GLchar* var_use = " goku[0] = result / 2;\n";
+ static const GLchar* fs = "#version 430 core\n"
"#extension GL_ARB_enhanced_layouts : require\n"
"\n"
- "in vec4 gs_fs;\n"
+ "in vec4 any_fs;\n"
"out vec4 fs_out;\n"
"\n"
"void main()\n"
"{\n"
- " fs_out = gs_fs;\n"
- "}\n"
- "\n";
- static const GLchar* gs_tested = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(points) in;\n"
- "layout(triangle_strip, max_vertices = 4) out;\n"
- "\n"
- "VAR_DEFINITION"
- "\n"
- "in vec4 tes_gs[];\n"
- "out vec4 gs_fs;\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 result = tes_gs[0];\n"
- "\n"
- "VARIABLE_USE"
- "\n"
- " gs_fs = result;\n"
- " gl_Position = vec4(-1, -1, 0, 1);\n"
- " EmitVertex();\n"
- " gs_fs = result;\n"
- " gl_Position = vec4(-1, 1, 0, 1);\n"
- " EmitVertex();\n"
- " gs_fs = result;\n"
- " gl_Position = vec4(1, -1, 0, 1);\n"
- " EmitVertex();\n"
- " gs_fs = result;\n"
- " gl_Position = vec4(1, 1, 0, 1);\n"
- " EmitVertex();\n"
- "}\n"
- "\n";
- static const GLchar* tcs = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(vertices = 1) out;\n"
- "\n"
- "in vec4 vs_tcs[];\n"
- "out vec4 tcs_tes[];\n"
- "\n"
- "void main()\n"
- "{\n"
- "\n"
- " tcs_tes[gl_InvocationID] = vs_tcs[gl_InvocationID];\n"
- "\n"
- " gl_TessLevelOuter[0] = 1.0;\n"
- " gl_TessLevelOuter[1] = 1.0;\n"
- " gl_TessLevelOuter[2] = 1.0;\n"
- " gl_TessLevelOuter[3] = 1.0;\n"
- " gl_TessLevelInner[0] = 1.0;\n"
- " gl_TessLevelInner[1] = 1.0;\n"
- "}\n"
- "\n";
- static const GLchar* tcs_tested = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(vertices = 1) out;\n"
- "\n"
- "VAR_DEFINITION"
- "\n"
- "in vec4 vs_tcs[];\n"
- "out vec4 tcs_tes[];\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 result = vs_tcs[gl_InvocationID];\n"
- "\n"
- "VARIABLE_USE"
- "\n"
- " tcs_tes[gl_InvocationID] = result;\n"
- "\n"
- " gl_TessLevelOuter[0] = 1.0;\n"
- " gl_TessLevelOuter[1] = 1.0;\n"
- " gl_TessLevelOuter[2] = 1.0;\n"
- " gl_TessLevelOuter[3] = 1.0;\n"
- " gl_TessLevelInner[0] = 1.0;\n"
- " gl_TessLevelInner[1] = 1.0;\n"
- "}\n"
- "\n";
- static const GLchar* tes_tested = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "layout(isolines, point_mode) in;\n"
- "\n"
- "VAR_DEFINITION"
- "\n"
- "in vec4 tcs_tes[];\n"
- "out vec4 tes_gs;\n"
- "\n"
- "void main()\n"
- "{\n"
- " vec4 result = tcs_tes[0];\n"
- "\n"
- "VARIABLE_USE"
- "\n"
- " tes_gs += result;\n"
- "}\n"
- "\n";
- static const GLchar* vs = "#version 430 core\n"
- "#extension GL_ARB_enhanced_layouts : require\n"
- "\n"
- "in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
- "\n"
- "void main()\n"
- "{\n"
- " vs_tcs = in_vs;\n"
+ " fs_out = any_fs;\n"
"}\n"
"\n";
static const GLchar* vs_tested = "#version 430 core\n"
"VAR_DEFINITION"
"\n"
"in vec4 in_vs;\n"
- "out vec4 vs_tcs;\n"
+ "out vec4 any_fs;\n"
"\n"
"void main()\n"
"{\n"
"\n"
"VARIABLE_USE"
"\n"
- " vs_tcs = result;\n"
+ " any_fs = result;\n"
"}\n"
"\n";
if (test_case.m_stage == stage)
{
- const GLchar* array = "";
- const GLchar* index = "";
size_t position = 0;
switch (stage)
{
- case Utils::Shader::GEOMETRY:
- source = gs_tested;
- array = "[]";
- index = "[0]";
- break;
- case Utils::Shader::TESS_CTRL:
- source = tcs_tested;
- array = "[]";
- index = "[gl_InvocationID]";
- break;
- case Utils::Shader::TESS_EVAL:
- source = tes_tested;
- array = "[]";
- index = "[0]";
- break;
case Utils::Shader::VERTEX:
source = vs_tested;
break;
Utils::replaceToken("VAR_DEFINITION", position, var_definition, source);
position = 0;
- Utils::replaceToken("ARRAY", position, array, source);
Utils::replaceToken("VARIABLE_USE", position, var_use, source);
-
- Utils::replaceAllTokens("INDEX", index, source);
}
else
{
switch (test_case.m_stage)
{
- case Utils::Shader::GEOMETRY:
- switch (stage)
- {
- case Utils::Shader::FRAGMENT:
- source = fs;
- break;
- case Utils::Shader::VERTEX:
- source = vs;
- break;
- default:
- source = "";
- }
- break;
- case Utils::Shader::TESS_CTRL:
- switch (stage)
- {
- case Utils::Shader::FRAGMENT:
- source = fs;
- break;
- case Utils::Shader::VERTEX:
- source = vs;
- break;
- default:
- source = "";
- }
- break;
- case Utils::Shader::TESS_EVAL:
- switch (stage)
- {
- case Utils::Shader::FRAGMENT:
- source = fs;
- break;
- case Utils::Shader::TESS_CTRL:
- source = tcs;
- break;
- case Utils::Shader::VERTEX:
- source = vs;
- break;
- default:
- source = "";
- }
- break;
case Utils::Shader::VERTEX:
switch (stage)
{
for (GLuint stage = 0; stage < Utils::Shader::STAGE_MAX; ++stage)
{
/* Not aplicable for */
- if ((Utils::Shader::COMPUTE == stage) || (Utils::Shader::FRAGMENT == stage) ||
- (Utils::Shader::GEOMETRY == stage) || (Utils::Shader::TESS_EVAL == stage))
+ if ((Utils::Shader::COMPUTE == stage) || (Utils::Shader::TESS_CTRL == stage) ||
+ (Utils::Shader::FRAGMENT == stage) || (Utils::Shader::GEOMETRY == stage) ||
+ (Utils::Shader::TESS_EVAL == stage))
{
continue;
}