aboutsummaryrefslogtreecommitdiff
path: root/samples
diff options
context:
space:
mode:
authordan sinclair <dj2@everburning.com>2019-03-05 09:18:17 -0500
committerGitHub <noreply@github.com>2019-03-05 09:18:17 -0500
commit703c18173e633d6b26d575bc53659cc17ea60af8 (patch)
tree72bd58128d2ef8e52b3c7bb54806064edbf46675 /samples
parent7b805bb199ae43fcc9541a7d2b7b5497221c46cd (diff)
downloadamber-703c18173e633d6b26d575bc53659cc17ea60af8.tar.gz
Add vulkan information into -V output. (#326)
This CL adds information from the vulkan physical device into the -V output when requested. Fixes #323
Diffstat (limited to 'samples')
-rw-r--r--samples/amber.cc7
-rw-r--r--samples/config_helper.cc9
-rw-r--r--samples/config_helper.h2
-rw-r--r--samples/config_helper_dawn.cc1
-rw-r--r--samples/config_helper_dawn.h1
-rw-r--r--samples/config_helper_vulkan.cc42
-rw-r--r--samples/config_helper_vulkan.h4
7 files changed, 56 insertions, 10 deletions
diff --git a/samples/amber.cc b/samples/amber.cc
index 7f27d00..160c60b 100644
--- a/samples/amber.cc
+++ b/samples/amber.cc
@@ -231,11 +231,6 @@ int main(int argc, const char** argv) {
return 0;
}
- if (options.input_filenames.empty()) {
- std::cerr << "Input file must be provided." << std::endl;
- return 2;
- }
-
amber::Result result;
std::vector<std::string> failures;
struct RecipeData {
@@ -303,7 +298,7 @@ int main(int argc, const char** argv) {
required_instance_extensions.end()),
std::vector<std::string>(required_device_extensions.begin(),
required_device_extensions.end()),
- options.disable_validation_layer, &config);
+ options.disable_validation_layer, options.show_version_info, &config);
if (!r.IsSuccess()) {
std::cout << r.Error() << std::endl;
diff --git a/samples/config_helper.cc b/samples/config_helper.cc
index 45c6834..05963fb 100644
--- a/samples/config_helper.cc
+++ b/samples/config_helper.cc
@@ -44,6 +44,7 @@ amber::Result ConfigHelper::CreateConfig(
const std::vector<std::string>& required_instance_extensions,
const std::vector<std::string>& required_device_extensions,
bool disable_validation_layer,
+ bool show_version_info,
std::unique_ptr<amber::EngineConfig>* config) {
switch (engine) {
case amber::kEngineTypeVulkan:
@@ -65,10 +66,10 @@ amber::Result ConfigHelper::CreateConfig(
if (!impl_)
return amber::Result("Unable to create config helper");
- return impl_->CreateConfig(engine_major, engine_minor, required_features,
- required_instance_extensions,
- required_device_extensions,
- disable_validation_layer, config);
+ return impl_->CreateConfig(
+ engine_major, engine_minor, required_features,
+ required_instance_extensions, required_device_extensions,
+ disable_validation_layer, show_version_info, config);
}
amber::Result ConfigHelper::Shutdown() {
diff --git a/samples/config_helper.h b/samples/config_helper.h
index 90bb0d7..5698f2a 100644
--- a/samples/config_helper.h
+++ b/samples/config_helper.h
@@ -39,6 +39,7 @@ class ConfigHelperImpl {
const std::vector<std::string>& required_instance_extensions,
const std::vector<std::string>& required_device_extensions,
bool disable_validation_layer,
+ bool show_version_info,
std::unique_ptr<amber::EngineConfig>* config) = 0;
// Destroy instance and device.
@@ -64,6 +65,7 @@ class ConfigHelper {
const std::vector<std::string>& required_instance_extensions,
const std::vector<std::string>& required_device_extensions,
bool disable_validation_layer,
+ bool show_version_info,
std::unique_ptr<amber::EngineConfig>* config);
// Destroy instance and device.
diff --git a/samples/config_helper_dawn.cc b/samples/config_helper_dawn.cc
index 3afbe37..4c449f8 100644
--- a/samples/config_helper_dawn.cc
+++ b/samples/config_helper_dawn.cc
@@ -37,6 +37,7 @@ amber::Result ConfigHelperDawn::CreateConfig(
const std::vector<std::string>&,
const std::vector<std::string>&,
bool,
+ bool,
std::unique_ptr<amber::EngineConfig>* config) {
#if AMBER_DAWN_METAL
auto r = dawn::CreateMetalDevice(&dawn_instance_, &dawn_device_);
diff --git a/samples/config_helper_dawn.h b/samples/config_helper_dawn.h
index 712e70f..4bc1fc7 100644
--- a/samples/config_helper_dawn.h
+++ b/samples/config_helper_dawn.h
@@ -44,6 +44,7 @@ class ConfigHelperDawn : public ConfigHelperImpl {
const std::vector<std::string>& required_instance_extensions,
const std::vector<std::string>& required_device_extensions,
bool disable_validation_layer,
+ bool show_version_info,
std::unique_ptr<amber::EngineConfig>* config) override;
// Destroy Dawn instance and device.
diff --git a/samples/config_helper_vulkan.cc b/samples/config_helper_vulkan.cc
index e26600d..b6de67f 100644
--- a/samples/config_helper_vulkan.cc
+++ b/samples/config_helper_vulkan.cc
@@ -17,6 +17,7 @@
#include <vulkan/vulkan.h>
#include <algorithm>
#include <cstring>
+#include <iostream>
#include <set>
#include "samples/log.h"
@@ -571,6 +572,24 @@ uint32_t ChooseQueueFamilyIndex(const VkPhysicalDevice& physical_device) {
return std::numeric_limits<uint32_t>::max();
}
+std::string deviceTypeToName(VkPhysicalDeviceType type) {
+ switch (type) {
+ case VK_PHYSICAL_DEVICE_TYPE_OTHER:
+ return "other";
+ case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:
+ return "integrated gpu";
+ case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:
+ return "discrete gpu";
+ case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:
+ return "virtual gpu";
+ case VK_PHYSICAL_DEVICE_TYPE_CPU:
+ return "cpu";
+ default:
+ break;
+ }
+ return "unknown";
+}
+
} // namespace
ConfigHelperVulkan::ConfigHelperVulkan() = default;
@@ -833,6 +852,25 @@ amber::Result ConfigHelperVulkan::DoCreateDevice(VkDeviceCreateInfo* info) {
return {};
}
+void ConfigHelperVulkan::DumpPhysicalDeviceInfo() {
+ VkPhysicalDeviceProperties props;
+ vkGetPhysicalDeviceProperties(vulkan_physical_device_, &props);
+
+ uint32_t api_version = props.apiVersion;
+
+ std::cout << std::endl;
+ std::cout << "Physical device properties:" << std::endl;
+ std::cout << " apiVersion: " << VK_VERSION_MAJOR(api_version) << "."
+ << VK_VERSION_MINOR(api_version) << "."
+ << VK_VERSION_PATCH(api_version) << std::endl;
+ std::cout << " driverVersion: " << props.driverVersion << std::endl;
+ std::cout << " vendorID: " << props.vendorID << std::endl;
+ std::cout << " deviceID: " << props.deviceID << std::endl;
+ std::cout << " deviceType: " << deviceTypeToName(props.deviceType)
+ << std::endl;
+ std::cout << " deviceName: " << props.deviceName << std::endl;
+}
+
amber::Result ConfigHelperVulkan::CreateConfig(
uint32_t engine_major,
uint32_t engine_minor,
@@ -840,6 +878,7 @@ amber::Result ConfigHelperVulkan::CreateConfig(
const std::vector<std::string>& required_instance_extensions,
const std::vector<std::string>& required_device_extensions,
bool disable_validation_layer,
+ bool show_version_info,
std::unique_ptr<amber::EngineConfig>* cfg_holder) {
amber::Result r = CreateVulkanInstance(engine_major, engine_minor,
required_instance_extensions,
@@ -857,6 +896,9 @@ amber::Result ConfigHelperVulkan::CreateConfig(
if (!r.IsSuccess())
return r;
+ if (show_version_info)
+ DumpPhysicalDeviceInfo();
+
r = CreateVulkanDevice(required_features, required_device_extensions);
if (!r.IsSuccess())
return r;
diff --git a/samples/config_helper_vulkan.h b/samples/config_helper_vulkan.h
index eb4e512..10e66d2 100644
--- a/samples/config_helper_vulkan.h
+++ b/samples/config_helper_vulkan.h
@@ -48,6 +48,7 @@ class ConfigHelperVulkan : public ConfigHelperImpl {
const std::vector<std::string>& required_instance_extensions,
const std::vector<std::string>& required_device_extensions,
bool disable_validation_layer,
+ bool show_version_info,
std::unique_ptr<amber::EngineConfig>* config) override;
// Destroy Vulkan instance and device.
@@ -89,6 +90,9 @@ class ConfigHelperVulkan : public ConfigHelperImpl {
// Creates the physical device given the device |info|.
amber::Result DoCreateDevice(VkDeviceCreateInfo* info);
+ // Writes information related to the vulkan instance to stdout.
+ void DumpPhysicalDeviceInfo();
+
VkInstance vulkan_instance_ = VK_NULL_HANDLE;
VkDebugReportCallbackEXT vulkan_callback_ = VK_NULL_HANDLE;
VkPhysicalDevice vulkan_physical_device_ = VK_NULL_HANDLE;