我在尝试让 debugPrintfEXT 在着色器中工作时遇到问题

如何解决我在尝试让 debugPrintfEXT 在着色器中工作时遇到问题

似乎我部分工作了,但每次尝试登录时我都会收到此消息:

验证层:验证警告:[ UNASSIGNED-DEBUG-PRINTF ] 对象 0:句柄 = 0x19d6337ae88,类型 = VK_OBJECT_TYPE_DEVICE; |消息 ID = 0x92394c89 |警告 - 调试 Printf 消息被截断,可能是由于缓冲区大小对于消息来说太小

我现在只做一个字符测试日志,直到我让它工作,所以它不应该是一个问题。我也有 #extension GL_EXT_debug_printf :在着色器中启用。

我已将调试器设置设为:

VkDebugUtilsMessengerCreateInfoEXT DebugInfo = {};
DebugInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
DebugInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;|
DebugInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;|
DebugInfo.pfnUserCallback = DebugCallBack;

启动验证信息:

    DeviceExtensions.emplace_back(VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME);

    VkValidationFeatureEnableEXT enabled[] = { VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT };
    VkValidationFeatureDisableEXT disabled[] = {
    VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT,VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT,VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT,VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT };
    std::vector<const char*> ExtensionList = getRequiredExtensions();
    VkInstanceCreateInfo VulkanCreateInfo = {};
    VulkanCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
    VulkanCreateInfo.pApplicationInfo = &VulkanInfo;
    VulkanCreateInfo.enabledExtensionCount = static_cast<uint32_t>(ExtensionList.size());
    VulkanCreateInfo.ppEnabledExtensionNames = ExtensionList.data();

#ifdef NDEBUG
    VulkanCreateInfo.enabledLayerCount = 0;
    VulkanCreateInfo.pNext = nullptr;
#else
    VkDebugUtilsMessengerCreateInfoEXT DebugInfo;
    VulkanDebug.CreateDebugMessengerInfo(DebugInfo);

    VkValidationFeaturesEXT ValidationFeatures{};
    ValidationFeatures.sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT;
    ValidationFeatures.disabledValidationFeatureCount = 4;
    ValidationFeatures.enabledValidationFeatureCount = 1;
    ValidationFeatures.pEnabledValidationFeatures = enabled;
    ValidationFeatures.pDisabledValidationFeatures = disabled;
    ValidationFeatures.pNext = (VkDebugUtilsMessengerCreateInfoEXT*)&DebugInfo;

    VulkanCreateInfo.enabledLayerCount = static_cast<unsigned int>(ValidationLayers.size());
    VulkanCreateInfo.ppEnabledLayerNames = ValidationLayers.data();
    VulkanCreateInfo.pNext = &ValidationFeatures;

vk_layer_settings:

khronos_validation.debug_action = VK_DBG_LAYER_ACTION_LOG_MSG
khronos_validation.report_flags = error,warn,perf
khronos_validation.log_filename = stdout
khronos_validation.printf_buffer_size = 1024
khronos_validation.printf_verbose = true

这是我试图从中记录和调试的计算着色器。 它应该可以做骨骼动画,但它遇到了一些问题,这让我找到了着色器记录器。

#version 460
#extension GL_ARB_separate_shader_objects : enable
#extension GL_EXT_nonuniform_qualifier : enable
#extension GL_EXT_scalar_block_layout : enable
#extension GL_EXT_debug_printf : enable

#include "Lighting.glsl"

struct Vertex
{
  vec3 Position;
    float     Padding1;
    vec3 Normal;
    float     Padding2;
    vec2 TexureCoord;
    vec2 Padding3;
    vec3 Tangant;
    float     Padding4;
    vec3 BiTangant;
    float     Padding5;
    vec4 Color;
    ivec4 BoneID ;
    vec4 BoneWeights;
 };

layout(binding = 0,scalar) buffer Vertices
{
  Vertex v[];
}
vertices;

layout(binding = 2) uniform UniformBufferObject {
    mat4 viewInverse;
    mat4 projInverse;
    mat4 model;
    mat4 view;
    mat4 proj;
    DirectionalLight dlight;
    vec3 viewPos;
    PointLight plight;
    float vertexSize;
    mat4 PVM;
    mat4 BoneTransform[100];
    float timer;
} ubo;
layout(binding = 5) buffer Transform { mat4 Transform; } MeshTransform[];


layout(push_constant) uniform MeshInfo
{
    uint MeshID;
    uint ModelID;
    uint MaterialID;
} Mesh;

void main()
{

    debugPrintfEXT("H");
  Vertex v0 = vertices.v[gl_GlobalInvocationID.x];

  mat4 BoneTransform = mat4(1.0f);
  BoneTransform =  ubo.BoneTransform[v0.BoneID[0]] * v0.BoneWeights[0];
  BoneTransform += ubo.BoneTransform[v0.BoneID[1]] * v0.BoneWeights[1];
  BoneTransform += ubo.BoneTransform[v0.BoneID[2]] * v0.BoneWeights[2];
  BoneTransform += ubo.BoneTransform[v0.BoneID[3]] * v0.BoneWeights[3];
  vec4 BonePosition = BoneTransform * vec4(v0.Position,1.0);

  v0.Position = vec3(ubo.model * MeshTransform[0].Transform * BonePosition);
  v0.Normal = normalize(transpose(inverse(mat3(ubo.model * MeshTransform[0].Transform * BoneTransform))) * v0.Normal);
    v0.Color = vec4(v0.BoneID.xyz,1.0f);
  vertices.v[gl_GlobalInvocationID.x] = v0;
}

是不是我遗漏了什么?

还制作了一个简单的骨骼样本,但仍然收到相同的消息:

好的,我使用 vulkantutorial 使用了一个基本的 vulkan 模板并输入了着色器 printf 设置,但仍然出现相同的错误。

https://github.com/ThomasDHZ/VulkanShaderLoggerTest

https://vulkan-tutorial.com/Drawing_a_triangle/Swap_chain_recreation

解决方法

您对每个计算着色器调用都进行了高度详细的打印。对于默认缓冲区大小 1024,这很可能是大量文本。 因此,您需要降低着色器中的 printf 调用,并且还希望将消息的详细程度降低到例如只有 VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT 而不是 VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res