| // 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 "debug.h" |
| |
| #include <stdbool.h> |
| |
| #include "common/macros.h" |
| |
| // |
| // |
| // |
| |
| void |
| vk_debug_compute_props(FILE * file, VkPhysicalDeviceProperties const * const pdp) |
| { |
| fprintf(file, |
| "%-49s : %u\n", |
| "maxComputeSharedMemorySize", |
| pdp->limits.maxComputeSharedMemorySize); |
| |
| fprintf(file, |
| "%-49s : ( %u, %u, %u )\n", |
| "maxComputeWorkGroupCount", |
| pdp->limits.maxComputeWorkGroupCount[0], |
| pdp->limits.maxComputeWorkGroupCount[1], |
| pdp->limits.maxComputeWorkGroupCount[2]); |
| |
| fprintf(file, |
| "%-49s : %u\n", |
| "maxComputeWorkGroupInvocations", |
| pdp->limits.maxComputeWorkGroupInvocations); |
| |
| fprintf(file, |
| "%-49s : ( %u, %u, %u )\n\n", |
| "maxComputeWorkGroupSize", |
| pdp->limits.maxComputeWorkGroupSize[0], |
| pdp->limits.maxComputeWorkGroupSize[1], |
| pdp->limits.maxComputeWorkGroupSize[2]); |
| } |
| |
| // |
| // |
| // |
| |
| void |
| vk_debug_subgroup_props(FILE * file, VkPhysicalDeviceSubgroupProperties const * const pdsp) |
| { |
| fprintf(file, "%-49s : %u\n", "subgroupSize", pdsp->subgroupSize); |
| |
| fprintf(file, |
| "%-49s : %s\n", |
| "quadOperationsInAllStages", |
| pdsp->quadOperationsInAllStages ? "true" : "false"); |
| |
| #define DEBUG_PDSP_SHADER_STAGE(pdsp, bit) \ |
| fprintf(file, \ |
| " %-45s : %s\n", \ |
| STRINGIFY_MACRO(bit), \ |
| (pdsp->supportedStages & bit) ? "true" : "false") |
| |
| fprintf(file, "supportedStages\n"); |
| DEBUG_PDSP_SHADER_STAGE(pdsp, VK_SHADER_STAGE_VERTEX_BIT); |
| DEBUG_PDSP_SHADER_STAGE(pdsp, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); |
| DEBUG_PDSP_SHADER_STAGE(pdsp, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); |
| DEBUG_PDSP_SHADER_STAGE(pdsp, VK_SHADER_STAGE_GEOMETRY_BIT); |
| DEBUG_PDSP_SHADER_STAGE(pdsp, VK_SHADER_STAGE_FRAGMENT_BIT); |
| DEBUG_PDSP_SHADER_STAGE(pdsp, VK_SHADER_STAGE_COMPUTE_BIT); |
| DEBUG_PDSP_SHADER_STAGE(pdsp, VK_SHADER_STAGE_ALL_GRAPHICS); |
| #if 0 |
| DEBUG_PDSP_SHADER_STAGE(pdsp,VK_SHADER_STAGE_RAYGEN_BIT_NV); |
| DEBUG_PDSP_SHADER_STAGE(pdsp,VK_SHADER_STAGE_ANY_HIT_BIT_NV); |
| DEBUG_PDSP_SHADER_STAGE(pdsp,VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV); |
| DEBUG_PDSP_SHADER_STAGE(pdsp,VK_SHADER_STAGE_MISS_BIT_NV); |
| DEBUG_PDSP_SHADER_STAGE(pdsp,VK_SHADER_STAGE_INTERSECTION_BIT_NV); |
| DEBUG_PDSP_SHADER_STAGE(pdsp,VK_SHADER_STAGE_CALLABLE_BIT_NV); |
| DEBUG_PDSP_SHADER_STAGE(pdsp,VK_SHADER_STAGE_TASK_BIT_NV); |
| DEBUG_PDSP_SHADER_STAGE(pdsp,VK_SHADER_STAGE_MESH_BIT_NV); |
| #endif |
| |
| #define DEBUG_PDSP_SUBGROUP_FEATURE(pdsp, op) \ |
| fprintf(file, \ |
| " %-45s : %s\n", \ |
| STRINGIFY_MACRO(op), \ |
| (pdsp->supportedOperations & op) ? "true" : "false") |
| |
| fprintf(file, "supportedOperations\n"); |
| DEBUG_PDSP_SUBGROUP_FEATURE(pdsp, VK_SUBGROUP_FEATURE_BASIC_BIT); |
| DEBUG_PDSP_SUBGROUP_FEATURE(pdsp, VK_SUBGROUP_FEATURE_VOTE_BIT); |
| DEBUG_PDSP_SUBGROUP_FEATURE(pdsp, VK_SUBGROUP_FEATURE_ARITHMETIC_BIT); |
| DEBUG_PDSP_SUBGROUP_FEATURE(pdsp, VK_SUBGROUP_FEATURE_BALLOT_BIT); |
| DEBUG_PDSP_SUBGROUP_FEATURE(pdsp, VK_SUBGROUP_FEATURE_SHUFFLE_BIT); |
| DEBUG_PDSP_SUBGROUP_FEATURE(pdsp, VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT); |
| DEBUG_PDSP_SUBGROUP_FEATURE(pdsp, VK_SUBGROUP_FEATURE_CLUSTERED_BIT); |
| DEBUG_PDSP_SUBGROUP_FEATURE(pdsp, VK_SUBGROUP_FEATURE_QUAD_BIT); |
| #if 0 |
| DEBUG_PDSP_SUBGROUP_FEATURE(pdsp,VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV); |
| #endif |
| fprintf(file, "\n"); |
| } |
| |
| // |
| // |
| // |
| |
| VkBool32 VKAPI_PTR |
| vk_debug_report_cb(VkDebugReportFlagsEXT flags, |
| VkDebugReportObjectTypeEXT objectType, |
| uint64_t object, |
| size_t location, |
| int32_t messageCode, |
| char const * pLayerPrefix, |
| char const * pMessage, |
| void * pUserData) |
| { |
| char const * flag_str = ""; |
| bool is_error = false; |
| |
| #define VK_FLAG_CASE_TO_STRING(c) \ |
| case c: \ |
| flag_str = #c; \ |
| is_error = true; \ |
| break |
| |
| switch (flags) |
| { |
| // VK_FLAG_CASE_TO_STRING(VK_DEBUG_REPORT_INFORMATION_BIT_EXT); |
| VK_FLAG_CASE_TO_STRING(VK_DEBUG_REPORT_WARNING_BIT_EXT); |
| VK_FLAG_CASE_TO_STRING(VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT); |
| VK_FLAG_CASE_TO_STRING(VK_DEBUG_REPORT_ERROR_BIT_EXT); |
| VK_FLAG_CASE_TO_STRING(VK_DEBUG_REPORT_DEBUG_BIT_EXT); |
| } |
| |
| if (is_error) |
| { |
| fprintf(stderr, "%s %s %s\n", flag_str, pLayerPrefix, pMessage); |
| } |
| |
| return VK_FALSE; |
| } |
| |
| // |
| // |
| // |