summaryrefslogtreecommitdiffstats
path: root/examples/hello-world
diff options
context:
space:
mode:
authorAnders Leino <aleino@nvidia.com>2025-01-07 12:51:51 +0200
committerGitHub <noreply@github.com>2025-01-07 10:51:51 +0000
commit7d4142e6aca5257602a7d82db5625adbb6fbc832 (patch)
treeae8271dbaa2ad5bafb64a5fc24a5a66b867346f5 /examples/hello-world
parent5621ace93b7665051f7e7c8a2fa68ceaf285ff8d (diff)
Fix some robustness issues in the examples (#5984)
* examples: Make hello-world example exit gracefully if VK cannot be initialized - Check if VK API function pointers are valid before using them - Return 0 and exit if VK initialization fails - Enable hello-world example * examples: Fixes for ray-tracing examples - Assert that accelleration structure buffer is not nullptr - Check if buffer creation succeeded before proceeding - This makes initialization not hang, but it still fails. Therefore, the test expectations are just updated to point to another issue. - Enable ray-tracing tests on Windows
Diffstat (limited to 'examples/hello-world')
-rw-r--r--examples/hello-world/main.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/examples/hello-world/main.cpp b/examples/hello-world/main.cpp
index 7e84d83e5..7e4211b12 100644
--- a/examples/hello-world/main.cpp
+++ b/examples/hello-world/main.cpp
@@ -80,7 +80,11 @@ int main(int argc, char* argv[])
int HelloWorldExample::run()
{
- RETURN_ON_FAIL(initVulkanInstanceAndDevice());
+ // If VK failed to initialize, skip running but return success anyway.
+ // This allows our automated testing to distinguish between essential failures and the
+ // case where the application is just not supported.
+ if (int result = initVulkanInstanceAndDevice())
+ return (vkAPI.device == VK_NULL_HANDLE) ? 0 : result;
RETURN_ON_FAIL(createComputePipelineFromShader());
RETURN_ON_FAIL(createInOutBuffers());
RETURN_ON_FAIL(dispatchCompute());
@@ -511,6 +515,9 @@ int HelloWorldExample::printComputeResults()
HelloWorldExample::~HelloWorldExample()
{
+ if (vkAPI.device == VK_NULL_HANDLE)
+ return;
+
vkAPI.vkDestroyPipeline(vkAPI.device, pipeline, nullptr);
for (int i = 0; i < 3; i++)
{