Add RegalPlugin private API for plugin dispatch layers to call back into Regal. Resolve snappy library Windows compilation warnings. Improvements for filtering emulation. Support EXT_framebuffer_object on ES 2
181 lines
5 KiB
C++
181 lines
5 KiB
C++
/*
|
|
Copyright (c) 2011-2013 NVIDIA Corporation
|
|
Copyright (c) 2013 Nigel Stewart
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without modification,
|
|
are permitted provided that the following conditions are met:
|
|
|
|
Redistributions of source code must retain the above copyright notice, this
|
|
list of conditions and the following disclaimer.
|
|
|
|
Redistributions in binary form must reproduce the above copyright notice,
|
|
this list of conditions and the following disclaimer in the documentation
|
|
and/or other materials provided with the distribution.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
|
OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
#include <GL/Regal.h>
|
|
|
|
#include <string>
|
|
#include <algorithm>
|
|
|
|
#include <boost/print/json.hpp>
|
|
|
|
#include "RegalJson.h"
|
|
#include "RegalConfig.h"
|
|
#include "RegalLog.h"
|
|
|
|
namespace REGAL_NAMESPACE_INTERNAL { namespace Json { struct Output : public ::boost::print::json::output<std::string> {}; } }
|
|
|
|
using namespace std;
|
|
using namespace ::REGAL_NAMESPACE_INTERNAL;
|
|
|
|
namespace {
|
|
|
|
static string json()
|
|
{
|
|
Json::Output jo;
|
|
jo.object();
|
|
jo.object("regal");
|
|
Config::writeJSON(jo);
|
|
Logging::writeJSON(jo);
|
|
jo.end();
|
|
jo.end();
|
|
return jo.str();
|
|
}
|
|
|
|
// ====================================
|
|
// Regal::Json
|
|
// ====================================
|
|
|
|
TEST( RegalJson, Parser )
|
|
{
|
|
const string state0 = json();
|
|
|
|
EXPECT_GT(state0.length(),0u);
|
|
EXPECT_NE(string::npos,state0.find("\"regal\""));
|
|
EXPECT_NE(string::npos,state0.find("\"config\""));
|
|
EXPECT_NE(string::npos,state0.find("\"logging\""));
|
|
|
|
// Toggle some Regal::Config state
|
|
|
|
Config::frameMd5Color = !Config::frameMd5Color;
|
|
|
|
const string state1 = json();
|
|
EXPECT_NE(state0,state1);
|
|
|
|
// Toggle it back again
|
|
|
|
Config::frameMd5Color = !Config::frameMd5Color;
|
|
|
|
const string state2 = json();
|
|
EXPECT_NE(state1,state2);
|
|
EXPECT_EQ(state0,state2);
|
|
|
|
// Increment an integer
|
|
|
|
Config::frameMd5DepthMask += 100;
|
|
|
|
const string state3 = json();
|
|
EXPECT_NE(state3,state0);
|
|
EXPECT_NE(state3,state1);
|
|
|
|
// Set a string
|
|
|
|
Config::cacheDirectory = "foo";
|
|
|
|
const string state4 = json();
|
|
EXPECT_NE(string::npos,state4.find("\"foo\""));
|
|
EXPECT_NE(state4,state0);
|
|
EXPECT_NE(state4,state1);
|
|
EXPECT_NE(state4,state3);
|
|
|
|
// Reset to state3
|
|
|
|
RegalConfigure(state3.c_str());
|
|
EXPECT_EQ(json(),state3);
|
|
|
|
// Reset to state1
|
|
|
|
RegalConfigure(state1.c_str());
|
|
EXPECT_EQ(state1,json());
|
|
|
|
// Reset to state0
|
|
|
|
RegalConfigure(state0.c_str());
|
|
EXPECT_EQ(state0,json());
|
|
}
|
|
|
|
TEST( RegalJson, Subset )
|
|
{
|
|
const string state0 = json();
|
|
|
|
const char *test1 = "{ \"regal\" : { \"config\" : { \"dispatch\" : { \"enable\" : { \"emulation\" : false }, \"force\" : { \"emulation\" : false } } } } }";
|
|
const char *test2 = "{ \"regal\" : { \"config\" : { \"dispatch\" : { \"enable\" : { \"emulation\" : true }, \"force\" : { \"emulation\" : true } } } } }";
|
|
|
|
RegalConfigure(test1);
|
|
EXPECT_EQ(Config::enableEmulation,false);
|
|
EXPECT_EQ(Config::forceEmulation,false);
|
|
|
|
RegalConfigure(test2);
|
|
EXPECT_EQ(Config::enableEmulation,true);
|
|
EXPECT_EQ(Config::forceEmulation,true);
|
|
|
|
// Reset to state0
|
|
|
|
RegalConfigure(state0.c_str());
|
|
EXPECT_EQ(state0,json());
|
|
}
|
|
|
|
TEST( RegalJson, Trace )
|
|
{
|
|
const string state0 = json();
|
|
|
|
const char *traceTrue = "{ \"regal\" : { \"config\" : { \"dispatch\" : { \"enable\" : { \"trace\" : true } } } } }";
|
|
const char *traceFalse = "{ \"regal\" : { \"config\" : { \"dispatch\" : { \"enable\" : { \"trace\" : false } } } } }";
|
|
|
|
RegalConfigure(traceTrue);
|
|
EXPECT_EQ(Config::enableTrace,true);
|
|
|
|
RegalConfigure(traceFalse);
|
|
EXPECT_EQ(Config::enableTrace,false);
|
|
|
|
// Reset to state0
|
|
|
|
RegalConfigure(state0.c_str());
|
|
EXPECT_EQ(state0,json());
|
|
}
|
|
|
|
TEST( RegalJson, BaseVertex )
|
|
{
|
|
const string state0 = json();
|
|
|
|
const char *baseVertexTrue = "{ \"regal\" : { \"config\" : { \"dispatch\" : { \"emulation\" : { \"enable\" : { \"bv\" : true } } } } } }";
|
|
const char *baseVertexFalse = "{ \"regal\" : { \"config\" : { \"dispatch\" : { \"emulation\" : { \"enable\" : { \"bv\" : false } } } } } }";
|
|
|
|
RegalConfigure(baseVertexTrue);
|
|
EXPECT_EQ(Config::enableEmuBaseVertex,true);
|
|
|
|
RegalConfigure(baseVertexFalse);
|
|
EXPECT_EQ(Config::enableEmuBaseVertex,false);
|
|
|
|
// Reset to state0
|
|
|
|
RegalConfigure(state0.c_str());
|
|
EXPECT_EQ(state0,json());
|
|
}
|
|
|
|
}
|