проблемы с использованием функции glsl барьер () в вычислительном шейдере vulkan на Adreno 630 - PullRequest
0 голосов
/ 06 ноября 2019

Я разрабатываю приложение рендеринга с использованием vulkan на графическом процессоре Adreno 630 (платформа SDM845).

Я пытался использовать вычислительный шейдер для предварительной обработки некоторых моих вложений, но у меня возникают проблемы с использованиемФункция барьера () для синхронизации моих потоков.

Куда бы я ни добавил «барьер ();»Инструкция, это приводит к сбою моего приложения.

Я компилирую код glsl, используя glslangvalidator для генерации скомпилированного кода spir-v для моего вычислительного шейдера.

Используемая версия glslangvalidator:

>glslangvalidator -v
Glslang Version: 7.11.3113
ESSL Version: OpenGL ES GLSL 3.20 glslang Khronos. 11.3113
GLSL Version: 4.60 glslang Khronos. 11.3113
SPIR-V Version 0x00010300, Revision 6
GLSL.std.450 Version 100, Revision 1
Khronos Tool ID 8
SPIR-V Generator Version 7
GL_KHR_vulkan_glsl version 100
ARB_GL_gl_spirv version 100

"Барьер ();"инструкция не входит в условный код, поэтому она должна работать.

Даже если я запускаю основную функцию с помощью «барьера ();»инструкция вызывает сбой моего приложения:

Пример кода glsl, который я пробовал:

#version 460
#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable

void main()
{
    // some variables declarations

    barrier();

    *** my code ***

}

Но если я прокомментирую строку с барьером (), мое приложение больше не будет падать.


Поскольку барьеры работают, когда я использую OpenCL на том же оборудовании, я попытался обойти проблему, используя clspv.

Я извлек последнюю версию мастер-кода из этого репозитория: https://github.com/google/clspv/blob/master/docs/OpenCLCOnVulkan.md

Я успешно скомпилировал некоторый базовый код OpenCL C в spir-v, но когда я добавляю в код барьеры (барьер (CLK_LOCAL_MEM_FENCE);), я сталкиваюсь с той же проблемой.

Любой намек начто может быть не так или у кого-то возникла такая же проблема?

Спасибо,

Дэмиен

...