Lines Matching refs:outer
548 static string tessellationLevelsString (const float* inner, int numInner, const float* outer, int numOuter)
551 return "inner: " + elemsStr(inner, inner+numInner) + ", outer: " + elemsStr(outer, outer+numOuter);
554 static string tessellationLevelsString (const float* inner, const float* outer, TessPrimitiveType primType)
556 return tessellationLevelsString(inner, numInnerTessellationLevels(primType), outer, numOuterTessellationLevels(primType));
559 static string tessellationLevelsString (const float* inner, const float* outer)
561 return tessellationLevelsString(inner, 2, outer, 4);
599 //! A description of an outer edge of a triangle, quad or isolines.
600 //! An outer edge can be described by the index of a u/v/w coordinate
857 int outer[3];
858 getClampedRoundedTriangleTessLevels(spacingMode, innerLevels, outerLevels, &inner, &outer[0]);
865 DE_ASSERT(de::abs(outerLevels[i] - (float)outer[i]) < 0.001f);
866 DE_ASSERT(inner > 1 || (outer[0] == 1 && outer[1] == 1 && outer[2] == 1));
869 return generateReferenceTriangleTessCoords(spacingMode, inner, outer[0], outer[1], outer[2]);
875 int outer[4];
876 getClampedRoundedQuadTessLevels(spacingMode, innerLevels, outerLevels, &inner[0], &outer[0]);
884 DE_ASSERT(de::abs(outerLevels[i] - (float)outer[i]) < 0.001f);
886 DE_ASSERT((inner[0] > 1 && inner[1] > 1) || (inner[0] == 1 && inner[1] == 1 && outer[0] == 1 && outer[1] == 1 && outer[2] == 1 && outer[3] == 1));
889 return generateReferenceQuadTessCoords(spacingMode, inner[0], inner[1], outer[0], outer[1], outer[2], outer[3]);
894 int outer[2];
895 getClampedRoundedIsolineTessLevels(spacingMode, &outerLevels[0], &outer[0]);
900 DE_ASSERT(de::abs(outerLevels[1] - (float)outer[1]) < 0.001f);
903 return generateReferenceIsolineTessCoords(outer[0], outer[1]);
922 int outer[3];
923 getClampedRoundedTriangleTessLevels(spacingMode, innerLevels, outerLevels, &inner, &outer[0]);
924 return (int)generateReferenceTriangleTessCoords(spacingMode, inner, outer[0], outer[1], outer[2]).size();
930 int outer[4];
931 getClampedRoundedQuadTessLevels(spacingMode, innerLevels, outerLevels, &inner[0], &outer[0]);
932 return (int)generateReferenceQuadTessCoords(spacingMode, inner[0], inner[1], outer[0], outer[1], outer[2], outer[3]).size();
937 int outer[2];
938 getClampedRoundedIsolineTessLevels(spacingMode, &outerLevels[0], &outer[0]);
939 return (int)generateReferenceIsolineTessCoords(outer[0], outer[1]).size();
958 int outer[3];
959 getClampedRoundedTriangleTessLevels(spacingMode, innerLevels, outerLevels, &inner, &outer[0]);
960 return referenceTriangleNonPointModePrimitiveCount(spacingMode, inner, outer[0], outer[1], outer[2]);
966 int outer[4];
967 getClampedRoundedQuadTessLevels(spacingMode, innerLevels, outerLevels, &inner[0], &outer[0]);
968 return referenceQuadNonPointModePrimitiveCount(spacingMode, inner[0], inner[1], outer[0], outer[1], outer[2], outer[3]);
973 int outer[2];
974 getClampedRoundedIsolineTessLevels(spacingMode, &outerLevels[0], &outer[0]);
975 return referenceIsolineNonPointModePrimitiveCount(outer[0], outer[1]);
997 //! \note Levels contains inner and outer levels, per patch, in order IIOOOO. The full 6 levels must always be present, irrespective of primitiveType.
1013 float* const outer = &tessLevels[patchNdx*6 + 2];
1018 outer[j] = j == constantOuterLevelIndex ? constantOuterLevel : rnd.getFloat(1.0f, 62.0f);
1211 * with outer levels { 1.0, tessLevel }) with a given fractional spacing
1887 float outer[4];
2002 float* const outer = &curTessLevelCase.outer[0];
2005 for (int j = 0; j < 4; j++) outer[j] = (float)getClampedRoundedTessLevel(m_spacing, outer[j]);
2009 if (outer[0] > 1.0f || outer[1] > 1.0f || outer[2] > 1.0f)
2017 if (outer[0] > 1.0f || outer[1] > 1.0f || outer[2] > 1.0f || outer[3] > 1.0f)
2053 caseReferences[i] = generateReferenceTessCoords(m_primitiveType, m_spacing, &tessLevelCases[i].inner[0], &tessLevelCases[i].outer[0]);
2068 const float* const outerLevels = &tessLevelCases[tessLevelCaseNdx].outer[0];
2233 // Second outer tessellation levels.
2370 float outer[4];
2403 outerLevels[i] = (float)getClampedRoundedTessLevel(m_spacing, tessLevelCases[tessLevelCaseNdx].outer[i]);
3545 float outer[4];
3546 string description (void) const { return tessellationLevelsString(&inner[0], &outer[0]); }
3607 for (int j = 0; j < DE_LENGTH_OF_ARRAY(levels.outer); j++)
3608 levels.outer[j] = rnd.getFloat(1.0f, 16.0f);
3744 &tessLevelCases[caseNdx].levels[i].inner[0], &tessLevelCases[caseNdx].levels[i].outer[0]);
3772 const float (&outer)[4] = tessLevels.outer;
3773 const float attribute[2*7] = { inner[0], inner[1], outer[0], outer[1], outer[2], outer[3], 0.0f,
3774 inner[0], inner[1], outer[0], outer[1], outer[2], outer[3], 0.5f };
3804 << TestLog::Message << "Note: tessellation levels for both primitives were: " << tessellationLevelsString(&inner[0], &outer[0]) << TestLog::EndMessage;
3869 * Test that the set of vertices along an outer edge of a quad or triangle
3872 * For each (outer) edge in the quad or triangle, draw multiple patches
3873 * with identical tessellation levels for that outer edge but with
3874 * different values for the other outer edges; compare, among the
3875 * primitives, the vertices generated for that outer edge. Repeat with
4035 const vector<float> patchTessLevels = generatePatchTessLevels(numPatchesPerDrawCall, 0 /* outer-edge index doesn't affect vertex count */, arrayMax(singleOuterEdgeLevels));
4058 Vec3Set firstOuterEdgeVertices; // Vertices of the outer edge of the first patch of the first program's draw call; used for comparison with other patches.
4060 log << TestLog::Message << "Testing with outer tessellation level " << singleOuterEdgeLevels[outerEdgeLevelCaseNdx]
4097 // We're interested in just the vertices on the current outer edge.
4105 // Check that the outer edge contains an appropriate number of vertices.
4111 log << TestLog::Message << "Failure: the number of vertices on outer edge is " << outerEdgeVertices.size()
4113 << TestLog::Message << "Note: vertices on the outer edge are:\n" << containerStr(outerEdgeVertices, 5, 0) << TestLog::EndMessage
4162 * Test that the vertices along an outer edge are placed symmetrically.
4166 * the vertices in the TES such that every vertex on an outer edge -
4250 " // Mirror one half of each outer edge onto the other half, except the endpoints (because they belong to two edges)\n"
4258 " // Mirror one half of each outer edge onto the other half, except the endpoints (because they belong to two edges)\n"
4265 " // Mirror one half of each outer edge onto the other half\n"
4318 const vector<float> patchTessLevels = generatePatchTessLevels(1, 0 /* outer-edge index doesn't affect vertex count */, arrayMax(singleOuterEdgeLevels));
4339 log << TestLog::Message << "Testing with outer tessellation level " << singleOuterEdgeLevels[outerEdgeLevelCaseNdx]
4369 // We're interested in just the vertices on the current outer edge.
4375 // Ignore the middle vertex of the outer edge, as it's exactly at the mirroring point;
4451 * Test that the vertices on an outer edge don't depend on which of the
4585 const vector<float> patchTessLevels = generatePatchTessLevels(1, 0 /* outer-edge index doesn't affect vertex count */, arrayMax(singleOuterEdgeLevels));
4604 log << TestLog::Message << "Testing with outer tessellation level " << singleOuterEdgeLevels[outerEdgeLevelCaseNdx]
4626 // Get the vertices on the current outer edge.
4750 for (int i = 0; i < DE_LENGTH_OF_ARRAY(levels.outer); i++)
4751 levels.outer[i] = rnd.getFloat(2.0f, 16.0f);
4789 return compareTriangleSets(coordsA, coordsB, m_testCtx.getLog(), IsInnerTriangleTriangle(), "outer triangles");
4791 return compareTriangleSets(coordsA, coordsB, m_testCtx.getLog(), IsInnerQuadTriangle(), "outer triangles");
4803 * Test that the set of outer triangles input to the TES only depends on
4804 * tessellation mode, spacing mode and the inner and outer tessellation
4805 * levels corresponding to the inner and outer edges relevant to that
4845 for (int i = 0; i < DE_LENGTH_OF_ARRAY(levels.outer); i++)
4848 levels.outer[i] = rnd.getFloat(2.0f, 16.0f);
4927 ("inner triangles, and outer triangles corresponding to other edge than edge "
4934 ("inner triangles, and outer triangles corresponding to other edge than edge "
5196 * \brief Test that patch is discarded if relevant outer level <= 0.0
5343 for (i[2] = 0; i[2] < numChoices; i[2]++) // First outer
5344 for (i[3] = 0; i[3] < numChoices; i[3]++) // Second outer
5345 for (i[4] = 0; i[4] < numChoices; i[4]++) // Third outer
5346 for (i[5] = 0; i[5] < numChoices; i[5]++) // Fourth outer
5408 log << TestLog::Message << "Note: rendering " << numPrimitives << " patches; first patches have valid relevant outer
5409 << "but later patches have one or more invalid (i.e. less than or equal to 0.0) relevant outer levels" << TestLog::EndMessage;
6222 static const float attributes[6+2+2] = { /* inner */ 3.0f, 4.0f, /* outer */ 5.0f, 6.0f, 7.0f, 8.0f, /* pos. scale */ 1.2f, 1.3f, /* pos. offset */ -0.3f, -0.4f };
7499 TestCaseGroup* const primitiveDiscardGroup = new TestCaseGroup(m_context, "primitive_discard", "Test primitive discard with relevant outer tessellation level <= 0.0");