Загрузка бинарного шейдера SPIRV завершается неудачно

В своей программе я пытался загрузить скомпилированные бинарные шейдеры с примером кода от Саши Виллемса (https://github.com/SaschaWillems/openglcpp/blob/master/SPIRVShader/main.cpp):

bool loadBinaryShader(const char *fileName, GLuint stage, GLuint binaryFormat, GLuint &shader)
{
std::ifstream shaderFile;
shaderFile.open(fileName, std::ios::binary | std::ios::ate);
if (shaderFile.is_open())
{
size_t size = shaderFile.tellg();
shaderFile.seekg(0, std::ios::beg);
char* bin = new char[size];
shaderFile.read(bin, size);

GLint status;
shader = glCreateShader(stage);                                 // Create a new shader
glShaderBinary(1, &shader, binaryFormat, bin, size);            // Load the binary shader file
glSpecializeShaderARB(shader, "main", 0, nullptr, nullptr);     // Set main entry point (required, no specialization used in this example)
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);              // Check compilation status
return status;
}
else
{
std::cerr << "Could not open \"" << fileName << "\"" << std::endl;
return false;
}
}

Я создал следующие два простых шейдера для тестирования:

test.frag

#version 450

in vec4 color;
out vec4 outCol;
void main()
{
outCol = vec4(1., 0., 0., 1.);
}

и text.vert

#version 450

layout (location = 0) in vec3 inPos;
layout (location = 1) in vec3 inColor;

layout (location = 0) out vec3 outColor;

out gl_PerVertex
{
vec4 gl_Position;
};void main()
{
outColor = vec3(0.2, 1., 0.2);
gl_Position = vec4(5.*inPos.xyz, 1.0);
}

Я преобразовал их в формат SPIR-V с помощью glslangValidator из github:
https://github.com/KhronosGroup/glslang
Я использовал:

glslangValidator.exe test.vert -G -o anypath.spv

Когда я пытаюсь загрузить эти шейдеры, происходит сбой при ошибке сегментации в строке

glSpecializeShaderARB(shader, "main", 0, nullptr, nullptr);

Я попробовал то же самое на другом ПК с более старым графическим процессором (GeForce GTX 660), и он просто отлично работает. Но это не работает на моем новом ПК с Radeon R9 Fury X.

Есть идеи?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]