c – Vulkan几何着色器中出现意外崩溃
发布时间:2020-12-16 07:20:17 所属栏目:百科 来源:网络整理
导读:在Vulkan几何着色器中进行浮点比较时,我遇到了奇怪的崩溃.着色器代码如下: #version 450#extension GL_ARB_separate_shader_objects : enable#extension GL_ARB_shading_language_420pack : enablelayout (triangles) in;layout (triangle_strip,max_vertic
在Vulkan几何着色器中进行浮点比较时,我遇到了奇怪的崩溃.着色器代码如下:
#version 450 #extension GL_ARB_separate_shader_objects : enable #extension GL_ARB_shading_language_420pack : enable layout (triangles) in; layout (triangle_strip,max_vertices=3) out; layout(binding = 0) uniform UniformBufferObject { mat4 modelView; mat4 staticModelView; } ubo; in vec2 texCoordGeom[]; layout(location = 0) out vec2 texCoord; void main() { float dist0 = length(gl_in[0].gl_Position.xyz - gl_in[1].gl_Position.xyz); float dist1 = length(gl_in[1].gl_Position.xyz - gl_in[2].gl_Position.xyz); float dist2 = length(gl_in[0].gl_Position.xyz - gl_in[2].gl_Position.xyz); float maxDist = max(dist0,max(dist1,dist2)); if(maxDist < 0.01) { gl_Position = ubo.modelView * gl_in[0].gl_Position; texCoord = texCoordGeom[0]; EmitVertex(); gl_Position = ubo.modelView * gl_in[1].gl_Position; texCoord = texCoordGeom[1]; EmitVertex(); gl_Position = ubo.modelView * gl_in[2].gl_Position; texCoord = texCoordGeom[2]; EmitVertex(); EndPrimitive(); } } 它似乎在条件下崩溃: if(maxDist < 0.01) 当我删除此条件时,代码运行没有问题.如果我将阈值的值从0.01更改为更大的值(例如0.1或1),则代码将再次运行而不会出现问题. 请注意,我使用VulkanSDK中的glslangValidator.exe来编译着色器代码.除警告外,不会抛出任何验证错误: 警告,版本450尚未完成;大多数特定于版本的功能都存在,但有些功能缺失. 另请注意,当程序崩溃时,如果整个GPU冻结(屏幕瞬间变黑)并且程序退出,则不会引发任何有用的错误. 解决方法
对于未来的读者来说,这似乎是一个驱动问题.自更新到最新的驱动程序(Radeon驱动程序包装版本 16.50.2011-161219a-309792E)以及最新的LunarG Vulkan SDK(1.0.37.0)问题已经解决.注意我正在运行 AMD Radeon R9 380系列.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |