text: // Copyright 2019 The Fuchsia Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  //
  //
  //
  
  #include <stdio.h>
  #include <stdlib.h>
  
  //
  //
  //
  
  #include "assert.h"
  
  //
  //
  //
  
  #define VK_RESULT_TO_STRING(result)                                                                \
    case result:                                                                                     \
      return #result
  
  //
  // FIXME -- results and errors
  //
  
  char const *
  vk_get_result_string(VkResult const result)
  {
    switch (result)
      {
        //
        // Results
        //
        VK_RESULT_TO_STRING(VK_SUCCESS);
        VK_RESULT_TO_STRING(VK_NOT_READY);
        VK_RESULT_TO_STRING(VK_TIMEOUT);
        VK_RESULT_TO_STRING(VK_EVENT_SET);
        VK_RESULT_TO_STRING(VK_EVENT_RESET);
        VK_RESULT_TO_STRING(VK_INCOMPLETE);
        //
        // Errors
        //
        VK_RESULT_TO_STRING(VK_ERROR_OUT_OF_HOST_MEMORY);
        VK_RESULT_TO_STRING(VK_ERROR_OUT_OF_DEVICE_MEMORY);
        VK_RESULT_TO_STRING(VK_ERROR_INITIALIZATION_FAILED);
        VK_RESULT_TO_STRING(VK_ERROR_DEVICE_LOST);
        VK_RESULT_TO_STRING(VK_ERROR_MEMORY_MAP_FAILED);
        VK_RESULT_TO_STRING(VK_ERROR_LAYER_NOT_PRESENT);
        VK_RESULT_TO_STRING(VK_ERROR_EXTENSION_NOT_PRESENT);
        VK_RESULT_TO_STRING(VK_ERROR_FEATURE_NOT_PRESENT);
        VK_RESULT_TO_STRING(VK_ERROR_INCOMPATIBLE_DRIVER);
        VK_RESULT_TO_STRING(VK_ERROR_TOO_MANY_OBJECTS);
        VK_RESULT_TO_STRING(VK_ERROR_FORMAT_NOT_SUPPORTED);
        VK_RESULT_TO_STRING(VK_ERROR_FRAGMENTED_POOL);
        VK_RESULT_TO_STRING(VK_ERROR_OUT_OF_POOL_MEMORY);
        VK_RESULT_TO_STRING(VK_ERROR_INVALID_EXTERNAL_HANDLE);
        VK_RESULT_TO_STRING(VK_ERROR_SURFACE_LOST_KHR);
        VK_RESULT_TO_STRING(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR);
        VK_RESULT_TO_STRING(VK_SUBOPTIMAL_KHR);
        VK_RESULT_TO_STRING(VK_ERROR_OUT_OF_DATE_KHR);
        VK_RESULT_TO_STRING(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR);
        VK_RESULT_TO_STRING(VK_ERROR_VALIDATION_FAILED_EXT);
        VK_RESULT_TO_STRING(VK_ERROR_INVALID_SHADER_NV);
        VK_RESULT_TO_STRING(VK_ERROR_FRAGMENTATION_EXT);
        VK_RESULT_TO_STRING(VK_ERROR_NOT_PERMITTED_EXT);
  
          //
          // Extensions: vk_xyz
          //
        default:
          return "UNKNOWN VULKAN RESULT";
      }
  }
  
  //
  //
  //
  
  VkResult
  vk_assert(VkResult const result, char const * const file, int const line, bool const is_abort)
  {
    if (result != VK_SUCCESS)
      {
        char const * const vk_result_str = vk_get_result_string(result);
  
        fprintf(stderr,
                "\"%s\", line %d: vk_assert( %d ) = \"%s\"",
                file,
                line,
                result,
                vk_result_str);
  
        if (is_abort)
          {
            abort();
          }
      }
  
    return result;
  }
  
  //
  //
  //
  