Skip to content

Commit

Permalink
Add -list_devices and -device datagenerator options, fix help message
Browse files Browse the repository at this point in the history
  • Loading branch information
dtarakanov1 committed Sep 6, 2018
1 parent b6c2df2 commit 0788f81
Show file tree
Hide file tree
Showing 10 changed files with 138 additions and 82 deletions.
39 changes: 25 additions & 14 deletions BaikalDataGenerator/Source/cmd_line_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,18 @@ THE SOFTWARE.
namespace
{
constexpr char const* kHelpMessage =
"Baikal [-light_file name_of_the_light_config]"
"[-camera_file name_of_the_camera_config]"
"[-scene_file name_of_the_scene_config]"
"[-spp_file name_of_the_spp_config]"
"[-outpute_dir path_to_generate_data]"
"[-width output_width]"
"[-height output_height]"
"[-gamma enables_gamma_correction]";
"USAGE:\n\n"
"Show this help message:\n"
" BaikalDataGenerator [-help]\n\n"
"List available devices:\n"
" BaikalDataGenerator [-list_devices]\n\n"
"Run data generation:\n"
" BaikalDataGenerator -width OUTPUT_IMAGES_WIDTH -height OUTPUT_IMAGES_HEIGHT\n"
" -scene_file SCENE_FILE_PATH -spp_file SPP_CONFIG_PATH\n"
" -light_file LIGHT_CONFIG_PATH -camera_file CAMERA_CONFIG_PATH\n"
" -output_dir OUTPUT_DIRECTORY [-device DEVICE_INDEX] [-gamma]\n"
" [-split_num CAMERA_SUBSET_NUMBER [-split_idx USE_CAMERA_SUBSET]]\n"
" [-offset_idx CAMERA_NUMERATION_OFFSET] [-nb BOUNSES_NUMBER]\n\n";
}

CmdLineParser::CmdLineParser(int argc, char* argv[])
Expand All @@ -44,6 +48,8 @@ DGenConfig CmdLineParser::Parse() const
{
DGenConfig config;

config.device_idx = m_cmd_parser.GetOption("-device", config.device_idx);

config.light_file = m_cmd_parser.GetOption("-light_file");

config.camera_file = m_cmd_parser.GetOption("-camera_file");
Expand All @@ -58,22 +64,27 @@ DGenConfig CmdLineParser::Parse() const

config.height = m_cmd_parser.GetOption<size_t>("-height");

config.split_num = m_cmd_parser.GetOption<size_t>("-split_num", config.split_num);
config.split_num = m_cmd_parser.GetOption("-split_num", config.split_num);

config.split_idx = m_cmd_parser.GetOption<size_t>("-split_idx", config.split_idx);
config.split_idx = m_cmd_parser.GetOption("-split_idx", config.split_idx);

config.offset_idx = m_cmd_parser.GetOption<size_t>("-offset_idx", config.offset_idx);
config.offset_idx = m_cmd_parser.GetOption("-offset_idx", config.offset_idx);

config.gamma_correction = (m_cmd_parser.GetOption<int>("-gamma", 0) == 1);
config.gamma_correction = m_cmd_parser.OptionExists("-gamma");

config.num_bounces = m_cmd_parser.GetOption<std::uint32_t>("-nb", config.num_bounces);
config.num_bounces = m_cmd_parser.GetOption("-nb", config.num_bounces);

return config;
}

bool CmdLineParser::HasListDevicesOption() const
{
return m_cmd_parser.OptionExists("-list_devices");
}

void CmdLineParser::ShowHelp() const
{
std::cout << kHelpMessage << "\n";
std::cout << kHelpMessage;
}

bool CmdLineParser::HasHelpOption() const
Expand Down
3 changes: 3 additions & 0 deletions BaikalDataGenerator/Source/cmd_line_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ class CmdLineParser
// Generate DGenConfig from internal string
DGenConfig Parse() const;

// check whether device list is requested
bool HasListDevicesOption() const;

// check if there is '-help' option
// returns true if there's a help option, false otherwise
bool HasHelpOption() const;
Expand Down
39 changes: 20 additions & 19 deletions BaikalDataGenerator/Source/config_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,26 +23,27 @@ THE SOFTWARE.
#include "config_loader.h"
#include "XML/tinyxml2.h"
#include "material_io.h"
#include <sstream>
#include "utils.h"


// validation checks helper macroses to reduce copy paste
#define ASSERT_PATH(file_name) \
if (file_name.empty()) { \
std::stringstream ss; \
ss << "missed " << file_name.string(); \
THROW_EX(ss.str()) } \
if (file_name.empty()) \
{ \
THROW_EX("Missing: " << file_name.string()) \
}

#define ASSERT_XML(file_name) \
if (file_name.extension() != ".xml") { \
std::stringstream ss; \
ss << "not xml file: " << file_name.string(); \
THROW_EX(ss.str()) } \
if (file_name.extension() != ".xml") \
{ \
THROW_EX("Not and XML file: " << file_name.string()) \
}

#define ASSERT_FILE_EXISTS(file_name) \
if (!std::filesystem::exists(file_name)) { \
std::stringstream ss; \
ss << "there is no file on specified path: " << file_name.string(); \
THROW_EX(ss.str()) } \
if (!std::filesystem::exists(file_name)) \
{ \
THROW_EX("File not found: " << file_name.string()) \
} \

void ConfigLoader::ValidateConfig(const DGenConfig& config) const
{
Expand All @@ -53,7 +54,7 @@ void ConfigLoader::ValidateConfig(const DGenConfig& config) const
ASSERT_PATH(config.scene_file);
ASSERT_PATH(config.output_dir);

// validate extansions
// validate extensions
ASSERT_XML(config.camera_file)
ASSERT_XML(config.light_file)
ASSERT_XML(config.spp_file)
Expand All @@ -66,7 +67,7 @@ void ConfigLoader::ValidateConfig(const DGenConfig& config) const

if (!std::filesystem::is_directory(config.output_dir))
{
THROW_EX(config.output_dir.string() + " should be directory")
THROW_EX("Not a directory: " << config.output_dir.string())
}
}

Expand All @@ -88,7 +89,7 @@ void ConfigLoader::LoadCameraConfig(const std::filesystem::path& file_name)

if (!root)
{
THROW_EX("Failed to open cameras set file.")
THROW_EX("Failed to open cameras set file: " << file_name.string())
}

tinyxml2::XMLElement* elem = root->FirstChildElement("camera");
Expand Down Expand Up @@ -142,7 +143,7 @@ void ConfigLoader::LoadLightConfig(const std::filesystem::path& file_name)

if (!root)
{
THROW_EX("Failed to open lights set file.")
THROW_EX("Failed to open lights set file: " << file_name.string())
}

tinyxml2::XMLElement* elem = root->FirstChildElement("light");
Expand All @@ -168,7 +169,7 @@ void ConfigLoader::LoadLightConfig(const std::filesystem::path& file_name)
}
else if ((light_info.type != "point") && (light_info.type != "direct"))
{
THROW_EX(light_info.type + "Is invalid light type");
THROW_EX("Invalid light type: " << light_info.type);
}

RadeonRays::float3 pos;
Expand Down Expand Up @@ -205,7 +206,7 @@ void ConfigLoader::LoadSppConfig(const std::filesystem::path& file_name)

if (!root)
{
THROW_EX("Failed to open SPP file: " + file_name.string())
THROW_EX("Failed to open SPP file: " << file_name.string())
}

tinyxml2::XMLElement* elem = root->FirstChildElement("spp");
Expand Down
22 changes: 22 additions & 0 deletions BaikalDataGenerator/Source/devices.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include "devices.h"

std::vector<CLWDevice> GetDevices()
{
std::vector<CLWDevice> devices;

std::vector<CLWPlatform> platforms;
CLWPlatform::CreateAllPlatforms(platforms);

for (const auto& platform : platforms)
{
for (auto i = 0u; i < platform.GetDeviceCount(); i++)
{
if (platform.GetDevice(i).GetType() == CL_DEVICE_TYPE_GPU)
{
devices.push_back(platform.GetDevice(i));
}
}
}

return devices;
}
8 changes: 8 additions & 0 deletions BaikalDataGenerator/Source/devices.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#pragma once

#include <CLW.h>

#include <vector>


std::vector<CLWDevice> GetDevices();
29 changes: 22 additions & 7 deletions BaikalDataGenerator/Source/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ THE SOFTWARE.

#include "cmd_line_parser.h"
#include "config_loader.h"
#include "devices.h"
#include "logging.h"
#include "render.h"
#include "utils.h"
Expand All @@ -34,7 +35,7 @@ void Run(const DGenConfig& config)
{
ConfigLoader config_loader(config);

Render render(config.scene_file, config.width, config.height, config.num_bounces);
Render render(config.scene_file, config.width, config.height, config.num_bounces, config.device_idx);

if ((config.split_num == 0) || (config.split_num > config_loader.CamStates().size()))
{
Expand All @@ -46,9 +47,9 @@ void Run(const DGenConfig& config)
THROW_EX("'split_idx' must be less than split_num");
}

std::vector<CameraInfo> camera_states_subset = GetSplitByIdx(config_loader.CamStates(),
config.split_num,
config.split_idx);
auto camera_states_subset = GetSplitByIdx(config_loader.CamStates(),
config.split_num,
config.split_idx);
render.GenerateDataset(camera_states_subset,
config_loader.Lights(),
config_loader.LightsDir(),
Expand All @@ -58,7 +59,7 @@ void Run(const DGenConfig& config)
config.gamma_correction);
}

int main(int argc, char *argv[])
int main(int argc, char* argv[])
try
{
auto OnCancel = [](int signal)
Expand All @@ -85,8 +86,6 @@ try
std::signal(SIGILL, OnFailure);
std::signal(SIGSEGV, OnFailure);

DG_LOG(KeyValue("status", "running") << KeyValue("start_ts", std::time(nullptr)));

CmdLineParser cmd_parser(argc, argv);

if (cmd_parser.HasHelpOption())
Expand All @@ -95,6 +94,22 @@ try
return 0;
}

if (cmd_parser.HasListDevicesOption())
{
std::cout << "Device list:\n";
auto devices = GetDevices();
for (std::size_t idx = 0; idx < devices.size(); ++idx)
{
DG_LOG(KeyValue("idx", idx)
<< KeyValue("name", devices[idx].GetName())
<< KeyValue("vendor", devices[idx].GetVendor())
<< KeyValue("version", devices[idx].GetVersion()));
}
return 0;
}

DG_LOG(KeyValue("status", "running") << KeyValue("start_ts", std::time(nullptr)));

auto config = cmd_parser.Parse();

Run(config);
Expand Down
Loading

0 comments on commit 0788f81

Please sign in to comment.