Ejemplo n.º 1
0
  // Interfacing candidates with an Eigen matrix of double x and a vector of objective function value.
  void to_mat_vec(std::vector<Candidate> &cp,
		  dMat &x, dVec &fvalues,
		  const bool &train)
  {
    if (train)
      std::sort(cp.begin(),cp.end(),
		[](Candidate const &c1, Candidate const &c2){return c1.get_fvalue() > c2.get_fvalue();}); // descending sort
    x = dMat(cp.at(0).get_x_size(),cp.size());
    fvalues = dVec(cp.size());
    for (int i=0;i<(int)cp.size();i++)
      {
	x.col(i) = cp.at(i).get_x_dvec().transpose();
	fvalues(i) = cp.at(i).get_fvalue();
      }
  }
Ejemplo n.º 2
0
TEST(MathLib, LocalMatrixDeterminantInverse_Eigen)
{
    Eigen::Matrix3d fMat, fInv;
    fMat << 1, 2, 3,
            0, 1, 4,
            5, 6, 0;
    double fMat_det = MathLib::determinant(fMat);
    MathLib::inverse(fMat, fMat_det, fInv);

    Eigen::MatrixXd dMat(3,3), dInv(3,3);
    dMat = fMat;
    double dMat_det = MathLib::determinant(dMat);
    MathLib::inverse(dMat, dMat_det, dInv);

    ASSERT_NEAR(fMat_det, dMat_det, std::numeric_limits<double>::epsilon());
    ASSERT_ARRAY_NEAR(fInv.data(), dInv.data(), fInv.size(), std::numeric_limits<double>::epsilon());
}
Ejemplo n.º 3
0
int TScanContext::tokenizeIdentifier()
{
    if (ReservedSet->find(tokenText) != ReservedSet->end())
        return reservedWord();

    auto it = KeywordMap->find(tokenText);
    if (it == KeywordMap->end()) {
        // Should have an identifier of some sort
        return identifierOrType();
    }
    keyword = it->second;
    field = false;

    switch (keyword) {
    case CONST:
    case UNIFORM:
    case IN:
    case OUT:
    case INOUT:
    case STRUCT:
    case BREAK:
    case CONTINUE:
    case DO:
    case FOR:
    case WHILE:
    case IF:
    case ELSE:
    case DISCARD:
    case RETURN:
    case CASE:
        return keyword;

    case SWITCH:
    case DEFAULT:
        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
            (parseContext.profile != EEsProfile && parseContext.version < 130))
            reservedWord();
        return keyword;

    case VOID:
    case BOOL:
    case FLOAT:
    case INT:
    case BVEC2:
    case BVEC3:
    case BVEC4:
    case VEC2:
    case VEC3:
    case VEC4:
    case IVEC2:
    case IVEC3:
    case IVEC4:
    case MAT2:
    case MAT3:
    case MAT4:
    case SAMPLER2D:
    case SAMPLERCUBE:
        afterType = true;
        return keyword;

    case BOOLCONSTANT:
        if (strcmp("true", tokenText) == 0)
            parserToken->sType.lex.b = true;
        else
            parserToken->sType.lex.b = false;
        return keyword;

    case ATTRIBUTE:
    case VARYING:
        if (parseContext.profile == EEsProfile && parseContext.version >= 300)
            reservedWord();
        return keyword;

    case BUFFER:
        if ((parseContext.profile == EEsProfile && parseContext.version < 310) || 
            (parseContext.profile != EEsProfile && parseContext.version < 430))
            return identifierOrType();
        return keyword;

    case ATOMIC_UINT:
        if ((parseContext.profile == EEsProfile && parseContext.version >= 310) ||
            parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters))
            return keyword;
        return es30ReservedFromGLSL(420);

    case COHERENT:
    case RESTRICT:
    case READONLY:
    case WRITEONLY:
        if (parseContext.profile == EEsProfile && parseContext.version >= 310)
            return keyword;
        return es30ReservedFromGLSL(parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store) ? 130 : 420);

    case VOLATILE:
        if (parseContext.profile == EEsProfile && parseContext.version >= 310)
            return keyword;
        if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.profile == EEsProfile || (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
            reservedWord();
        return keyword;

    case LAYOUT:
    {
        const int numLayoutExts = 2;
        const char* layoutExts[numLayoutExts] = { E_GL_ARB_shading_language_420pack,
                                                  E_GL_ARB_explicit_attrib_location };
        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
            (parseContext.profile != EEsProfile && parseContext.version < 140 &&
            ! parseContext.extensionsTurnedOn(numLayoutExts, layoutExts)))
            return identifierOrType();
        return keyword;
    }
    case SHARED:
        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
            (parseContext.profile != EEsProfile && parseContext.version < 140))
            return identifierOrType();
        return keyword;

    case PATCH:
        if (parseContext.symbolTable.atBuiltInLevel() ||
            (parseContext.profile == EEsProfile && parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader)) ||
            (parseContext.profile != EEsProfile && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
            return keyword;

        return es30ReservedFromGLSL(400);

    case SAMPLE:
        if (parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
            return keyword;
        return es30ReservedFromGLSL(400);

    case SUBROUTINE:
        return es30ReservedFromGLSL(400);

    case HIGH_PRECISION:
    case MEDIUM_PRECISION:
    case LOW_PRECISION:
    case PRECISION:
        return precisionKeyword();

    case MAT2X2:
    case MAT2X3:
    case MAT2X4:
    case MAT3X2:
    case MAT3X3:
    case MAT3X4:
    case MAT4X2:
    case MAT4X3:
    case MAT4X4:        
        return matNxM();

    case DMAT2:
    case DMAT3:
    case DMAT4:
    case DMAT2X2:
    case DMAT2X3:
    case DMAT2X4:
    case DMAT3X2:
    case DMAT3X3:
    case DMAT3X4:
    case DMAT4X2:
    case DMAT4X3:
    case DMAT4X4:
        return dMat();

    case IMAGE1D:
    case IIMAGE1D:
    case UIMAGE1D:
    case IMAGE1DARRAY:
    case IIMAGE1DARRAY:
    case UIMAGE1DARRAY:
    case IMAGE2DRECT:
    case IIMAGE2DRECT:
    case UIMAGE2DRECT:
        afterType = true;
        return firstGenerationImage(false);

    case IMAGEBUFFER:
    case IIMAGEBUFFER:
    case UIMAGEBUFFER:
        afterType = true;
        if (parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
            return keyword;
        return firstGenerationImage(false);

    case IMAGE2D:
    case IIMAGE2D:
    case UIMAGE2D:
    case IMAGE3D:
    case IIMAGE3D:
    case UIMAGE3D:
    case IMAGECUBE:
    case IIMAGECUBE:
    case UIMAGECUBE:
    case IMAGE2DARRAY:
    case IIMAGE2DARRAY:
    case UIMAGE2DARRAY:
        afterType = true;
        return firstGenerationImage(true);

    case IMAGECUBEARRAY:
    case IIMAGECUBEARRAY:
    case UIMAGECUBEARRAY:
        afterType = true;
        if (parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
            return keyword;
        return secondGenerationImage();

    case IMAGE2DMS:
    case IIMAGE2DMS:
    case UIMAGE2DMS:
    case IMAGE2DMSARRAY:
    case IIMAGE2DMSARRAY:
    case UIMAGE2DMSARRAY:
        afterType = true;
        return secondGenerationImage();

    case DOUBLE:
    case DVEC2:
    case DVEC3:
    case DVEC4:
        afterType = true;
        if (parseContext.profile == EEsProfile || parseContext.version < 400)
            reservedWord();
        return keyword;

    case SAMPLERCUBEARRAY:
    case SAMPLERCUBEARRAYSHADOW:
    case ISAMPLERCUBEARRAY:
    case USAMPLERCUBEARRAY:
        afterType = true;
        if (parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
            return keyword;
        if (parseContext.profile == EEsProfile || (parseContext.version < 400 && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array)))
            reservedWord();
        return keyword;

    case ISAMPLER1D:
    case ISAMPLER1DARRAY:
    case SAMPLER1DARRAYSHADOW:
    case USAMPLER1D:
    case USAMPLER1DARRAY:
        afterType = true;
        return es30ReservedFromGLSL(130);

    case UINT:
    case UVEC2:
    case UVEC3:
    case UVEC4:
    case SAMPLERCUBESHADOW:
    case SAMPLER2DARRAY:
    case SAMPLER2DARRAYSHADOW:
    case ISAMPLER2D:
    case ISAMPLER3D:
    case ISAMPLERCUBE:
    case ISAMPLER2DARRAY:
    case USAMPLER2D:
    case USAMPLER3D:
    case USAMPLERCUBE:
    case USAMPLER2DARRAY:
        afterType = true;
        return nonreservedKeyword(300, 130);
        
    case ISAMPLER2DRECT:
    case USAMPLER2DRECT:
        afterType = true;
        return es30ReservedFromGLSL(140);

    case SAMPLERBUFFER:
        afterType = true;
        if (parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
            return keyword;
        return es30ReservedFromGLSL(130);

    case ISAMPLERBUFFER:
    case USAMPLERBUFFER:
        afterType = true;
        if (parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
            return keyword;
        return es30ReservedFromGLSL(140);
        
    case SAMPLER2DMS:
    case ISAMPLER2DMS:
    case USAMPLER2DMS:
        afterType = true;
        if (parseContext.profile == EEsProfile && parseContext.version >= 310)
            return keyword;
        return es30ReservedFromGLSL(150);

    case SAMPLER2DMSARRAY:
    case ISAMPLER2DMSARRAY:
    case USAMPLER2DMSARRAY:
        afterType = true;
        if (parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array))
            return keyword;
        return es30ReservedFromGLSL(150);

    case SAMPLER1D:
    case SAMPLER1DSHADOW:
        afterType = true;
        if (parseContext.profile == EEsProfile)
            reservedWord();
        return keyword;

    case SAMPLER3D:
        afterType = true;
        if (parseContext.profile == EEsProfile && parseContext.version < 300) {
            if (! parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
                reservedWord();
        }
        return keyword;

    case SAMPLER2DSHADOW:
        afterType = true;
        if (parseContext.profile == EEsProfile && parseContext.version < 300)
            reservedWord();
        return keyword;

    case SAMPLER2DRECT:
    case SAMPLER2DRECTSHADOW:
        afterType = true;
        if (parseContext.profile == EEsProfile)
            reservedWord();
        else if (parseContext.version < 140 && ! parseContext.symbolTable.atBuiltInLevel() && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_rectangle)) {
            if (parseContext.relaxedErrors())
                parseContext.requireExtensions(loc, 1, &E_GL_ARB_texture_rectangle, "texture-rectangle sampler keyword");
            else
                reservedWord();
        }
        return keyword;

    case SAMPLER1DARRAY:
        afterType = true;
        if (parseContext.profile == EEsProfile && parseContext.version == 300)
            reservedWord();
        else if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
                 (parseContext.profile != EEsProfile && parseContext.version < 130))
            return identifierOrType();
        return keyword;

    case SAMPLEREXTERNALOES:
        afterType = true;
        if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external))
            return keyword;
        return identifierOrType();

    case NOPERSPECTIVE:
        return es30ReservedFromGLSL(130);
        
    case SMOOTH:
        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
            (parseContext.profile != EEsProfile && parseContext.version < 130))
            return identifierOrType();
        return keyword;

    case FLAT:
        if (parseContext.profile == EEsProfile && parseContext.version < 300)
            reservedWord();
        else if (parseContext.profile != EEsProfile && parseContext.version < 130)
            return identifierOrType();
        return keyword;

    case CENTROID:
        if (parseContext.version < 120)
            return identifierOrType();
        return keyword;

    case PRECISE:
        if ((parseContext.profile == EEsProfile && parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5)) || 
            (parseContext.profile != EEsProfile && parseContext.version >= 400))
            return keyword;
        if (parseContext.profile == EEsProfile && parseContext.version == 310) {
            reservedWord();
            return keyword;
        }
        return identifierOrType();

    case INVARIANT:
        if (parseContext.profile != EEsProfile && parseContext.version < 120)
            return identifierOrType();
        return keyword;

    case PACKED:
        if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
            (parseContext.profile != EEsProfile && parseContext.version < 330))
            return reservedWord();
        return identifierOrType();

    case RESOURCE:
    {
        bool reserved = (parseContext.profile == EEsProfile && parseContext.version >= 300) ||
                        (parseContext.profile != EEsProfile && parseContext.version >= 420);
        return identifierOrReserved(reserved);
    }
    case SUPERP:
    {
        bool reserved = parseContext.profile == EEsProfile || parseContext.version >= 130;
        return identifierOrReserved(reserved);
    }
    
    default:
        parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
        return 0;
    }
}