繁体   English   中英

Vulkan几何着色器中出现意外崩溃

[英]Unexpected crashes in Vulkan geometry shader

在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 Driver Packaging Version 16.50.2011-161219a-309792E)以及最新的LunarG Vulkan SDK(1.0.37.0),问题已经解决。 注意我在AMD Radeon R9 380系列上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM