Lines Matching refs:css

888 	void printIndent(std::stringstream &css)
891 css << " ";
901 void printBallot(std::stringstream *css)
903 *css << "outputC.loc[gl_LocalInvocationIndex]++,";
910 *css << "outputB.b[(outLoc++)*invocationStride + gl_LocalInvocationIndex] = " << genPartitionBallot();
914 *css << "outputB.b[(outLoc++)*invocationStride + gl_LocalInvocationIndex].x = elect()";
918 *css << "outputB.b[(outLoc++)*invocationStride + gl_LocalInvocationIndex] = subgroupBallot(true).xy";
924 std::stringstream *css = &main;
933 printIndent(*css);
938 *css << "if (inputA.a[" << idx << "] == " << idx << ") {\n";
941 *css << "if (testBit(uvec2(0x" << std::hex << (ops[i].value & 0xFFFFFFFF) << ", 0x" << (ops[i].value >> 32) << "), gl_SubgroupInvocationID)) {\n";
946 printIndent(*css); *css << "if (gl_SubgroupInvocationID == loopIdx" << loopNesting - 1 << ") {\n";
950 printIndent(*css); *css << "if (gl_LocalInvocationIndex >= inputA.a[0x" << std::hex << ops[i].value << "]) {\n";
957 printIndent(*css); *css << "} else {\n";
962 printIndent(*css); *css << "}\n";
965 printIndent(*css); printBallot(css); *css << ";\n";
968 printIndent(*css); *css << "outputC.loc[gl_LocalInvocationIndex]++;\n";
969 printIndent(*css); *css << "outputB.b[(outLoc++)*invocationStride + gl_LocalInvocationIndex].x = 0x" << std::hex << ops[i].value << ";\n";
972 printIndent(*css); *css << "for (int loopIdx" << loopNesting << " = 0;\n";
973 printIndent(*css); *css << " loopIdx" << loopNesting << " < inputA.a[" << ops[i].value << "];\n";
974 printIndent(*css); *css << " loopIdx" << loopNesting << "++) {\n";
981 printIndent(*css); *css << "}\n";
984 printIndent(*css); *css << "{\n";
986 printIndent(*css); *css << "int loopIdx" << loopNesting << " = 0;\n";
987 printIndent(*css); *css << "do {\n";
989 printIndent(*css); *css << "loopIdx" << loopNesting << "++;\n";
993 printIndent(*css); *css << "{\n";
995 printIndent(*css); *css << "int loopIdx" << loopNesting << " = 0;\n";
996 printIndent(*css); *css << "do {\n";
1003 printIndent(*css); *css << "} while (loopIdx" << loopNesting << " < inputA.a[" << ops[(deUint32)ops[i].value].value << "]);\n";
1005 printIndent(*css); *css << "}\n";
1009 printIndent(*css); *css << "loopIdx" << loopNesting << "++;\n";
1011 printIndent(*css); *css << "} while (true);\n";
1013 printIndent(*css); *css << "}\n";
1016 printIndent(*css); *css << "for (int loopIdx" << loopNesting << " = 0;\n";
1017 printIndent(*css); *css << " loopIdx" << loopNesting << " < gl_SubgroupInvocationID + 1;\n";
1018 printIndent(*css); *css << " loopIdx" << loopNesting << "++) {\n";
1025 printIndent(*css); *css << "}\n";
1028 printIndent(*css); *css << "for (int loopIdx" << loopNesting << " = 0;;loopIdx" << loopNesting << "++,";
1030 printBallot(css);
1031 *css << ") {\n";
1037 printIndent(*css); *css << "}\n";
1040 printIndent(*css); *css << "break;\n";
1043 printIndent(*css); *css << "continue;\n";
1046 printIndent(*css); *css << "if (subgroupElect()) {\n";
1050 printIndent(*css); *css << "return;\n";
1053 printIndent(*css); *css << "func" << funcNum << "(";
1056 *css << "loopIdx" << n;
1058 *css << ", ";
1060 *css << ");\n";
1061 css = &functions;
1062 printIndent(*css); *css << "void func" << funcNum << "(";
1065 *css << "int loopIdx" << n;
1067 *css << ", ";
1069 *css << ") {\n";
1075 printIndent(*css); *css << "}\n";
1076 css = &main;
1081 printIndent(*css); *css << "while (!subgroupElect()) {}\n";
1085 printIndent(*css); *css << "if (inputA.a[0] == 12345) {\n";
1087 printIndent(*css); *css << "while (true) {\n";
1089 printIndent(*css); printBallot(css); *css << ";\n";
1091 printIndent(*css); *css << "}\n";
1093 printIndent(*css); *css << "}\n";
1097 printIndent(*css); *css << "switch (inputA.a[" << ops[i].value << "]) {\n";
1101 printIndent(*css); *css << "switch (gl_SubgroupInvocationID & 3) {\n";
1105 printIndent(*css); *css << "switch (loopIdx" << ops[i].value << ") {\n";
1110 printIndent(*css); *css << "}\n";
1117 printIndent(*css); *css << "case " << b << ":\n";
1120 printIndent(*css); *css << "{\n";
1126 printIndent(*css); *css << "default: {\n";
1130 printIndent(*css); *css << "case " << ops[i].caseValue << ": {\n";
1135 printIndent(*css); *css << "break;\n";
1137 printIndent(*css); *css << "}\n";
1563 std::stringstream css;
1564 css << "#version 450 core\n";
1565 css << "#extension GL_KHR_shader_subgroup_ballot : enable\n";
1566 css << "#extension GL_KHR_shader_subgroup_vote : enable\n";
1567 css << "#extension GL_NV_shader_subgroup_partitioned : enable\n";
1568 css << "#extension GL_EXT_subgroup_uniform_control_flow : enable\n";
1569 css << "layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in;\n";
1570 css << "layout(set=0, binding=0) coherent buffer InputA { uint a[]; } inputA;\n";
1571 css << "layout(set=0, binding=1) coherent buffer OutputB { uvec2 b[]; } outputB;\n";
1572 css << "layout(set=0, binding=2) coherent buffer OutputC { uint loc[]; } outputC;\n";
1573 css << "layout(push_constant) uniform PC {\n"
1577 css << "int outLoc = 0;\n";
1579 css << "bool testBit(uvec2 mask, uint bit) { return (bit < 32) ? ((mask.x >> bit) & 1) != 0 : ((mask.y >> (bit-32)) & 1) != 0; }\n";
1581 css << "uint elect() { return int(subgroupElect()) + 1; }\n";
1586 css << functions.str() << "\n\n";
1588 css <<
1593 css << main.str() << "\n\n";
1595 css << "}\n";
1599 programCollection.glslSources.add("test") << glu::ComputeSource(css.str()) << buildOptions;