Android Vulkan ClipDistance 在 Pixel6 和 7 上崩溃

问题描述 投票:0回答:0

使用带有 ClipDistance 的顶点着色器创建 Vulkan 管道时,我在 Android(Pixel6 和 7)上发生崩溃。这发生在一个空项目上。

崩溃信息转储示例如下..

原因:空指针解引用 x0 00000072e8a10be8 x1 0000000000000000 x2 0000000000000000 x3 b4000074c3297790 x4 b4000074c3297740 x5 0000800000000000 x6 736eff676273606f x7 7f7f7f7f7f7f7f7f x8 0000000000000510 x9 b4000074c3297230 x10 00000000000005a0 x11 0000000000000050 x12 0000000000000010 x13 0000000000000074 x14 0000000000000003 x15 0000000000000000 x16 000000733a2fedb0 x17 0000007611990ee0 x18 00000072e826c000 x19 00000072e8a10be8 x20 b4000074c3297740 x21 000000000000000e x22 b4000074c3294998 x23 0000000000000002 x24 b4000074c3296840 x25 0000000000000000 x26 0000000000000000 x27 0000000000000000 x28 b4000074c3296b50 x29 0000000000000005 lr 000000733939dc10 sp 00000072e8a109e0 pc 000000733939dc28 pst 0000000060001000 回溯: #00 pc 0000000001740c28 /vendor/lib64/egl/libGLES_mali.so (spir2lir::SPIR2LIR::evaluate_address(unsigned int, unsigned int)+232) (BuildId: b48476426b9064ec) #01 pc 00000000017598f4 /vendor/lib64/egl/libGLES_mali.so (spir2lir::SPIR2LIR::on_AccessChain(unsigned int)+676) (BuildId: b48476426b9064ec) #02 pc 0000000001751b58 /vendor/lib64/egl/libGLES_mali.so (SPIR_Parser::parse(unsigned int const*, unsigned int)+1976) (BuildId: b48476426b9064ec) #03 pc 000000000174ee7c /vendor/lib64/egl/libGLES_mali.so (spirv_compile_shader+268) (BuildId: b48476426b9064ec) #04 pc 00000000015ec680 /vendor/lib64/egl/libGLES_mali.so (cmpbe_v2_compile_multiple_shaders_internal+2352) (BuildId: b48476426b9064ec) #05 pc 000000000150afb8 /vendor/lib64/egl/libGLES_mali.so (gfx::compiler::compile_shaders(gfx::shader_set const&, gfx::shader_set&, hal::shader_language, gfx::shader_state const&, gfx::pipeline_cache* , gfx::mem_allocator&, bool*, unsigned long*)+7320) (BuildId: b48476426b #06 pc 0000000000759d8c /vendor/lib64/egl/libGLES_mali.so (vulkan::graphics_pipeline::init(vulkan::device*, VkGraphicsPipelineCreateInfo const&, gfx::host_mem_allocator const&, gfx::host_mem_allocator&)+7036) (BuildId46b24b24 ) #07 pc 0000000000758120 /vendor/lib64/egl/libGLES_mali.so (vkCreateGraphicsPipelines+528) (BuildId: b48476426b9064ec) #08 pc 000000000001aba0 /system/lib64/libvulkan.so (vkCreateGraphicsPipelines+16) (BuildId: c005342c5a28dae834265c2e93265f33) #09 pc 000000000003a958 /data/app/~~0vHM8ghdF-e_GyZVsIS3oQ==/com.android.example.vulkan.tutorials.five-dFWl8Qc2Jl4BBPvHL7Mmsg==/base.apk!libvktuts.so (CreateGraphicsPipeline()+1100) (BuildId: 207dd33141984226bd311c8d1969bf014b54866e) #10 pc 000000000003ac98 /data/app/~~0vHM8ghdF-e_GyZVsIS3oQ==/com.android.example.vulkan.tutorials.five-dFWl8Qc2Jl4BBPvHL7Mmsg==/base.apk!libvktuts.so (InitVulkan(android_app*)+524) ( BuildId:207dd33141984226bd311c8d1969bf014b54866e) #11 pc 00000000000429e4 /data/app/~~0vHM8ghdF-e_GyZVsIS3oQ==/com.android.example.vulkan.tutorials.five-dFWl8Qc2Jl4BBPvHL7Mmsg==/base.apk!libvktuts.so (handle_cmd(android_app*, int)+56 ) (BuildId: 207dd33141984226bd311c8d1969bf014b54866e) #12 PC 00000000000004A220/DATA/App/~ 0vhm8ghm8ghdf-e_gyzvsis3oq==/com.android.example.vulkan.tutorials.five-dfwl8qc2jl8qc2jl8qc2jl8qc2jl4bbpvhl7mmsg build811141141base.base.apvk! #13 pc 0000000000042a84 /data/app/~~0vHM8ghdF-e_GyZVsIS3oQ==/com.android.example.vulkan.tutorials.five-dFWl8Qc2Jl4BBPvHL7Mmsg==/base.apk!libvktuts.so (android_main+104) (BuildId: 207dd33141984226bd311c8d1969bf014b54866e) #14 PC 000000000004A1BC/DATA/App/~0vhm8ghm8ghdf-e_gyzvsis3oq==/com.android.example.vulkan.tutorys.five-dfive-dfwll8qc2jl8qc2jl8qc2jl4bbpvhl4bpvhl7mmmsg=11base.base.base.base.apktem.apbase.apkt! #15 pc 00000000000c14dc /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+204) (BuildId: cbc4c62a9b269839456f1d7728d8411e) #16 pc 0000000000054930 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: cbc4c62a9b269839456f1d7728d8411e)

为了重现问题,我采用了下面的示例代码..

Vulkan 示例

我在 AndroidStudio (4.2) 中加载了 tutorial05_triangle 并修改了“tri.vert”着色器以输出到裁剪距离。整个着色器最终是这样的:

#version 400
#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable

layout (location = 0) in vec4 pos;
void main()
{
   gl_Position = pos;
   gl_ClipDistance[0] = 0;
}

然后这将运行,然后仅在 Pixel 手机上立即崩溃,但在其他所有手机上都很好。

这是一个已知问题吗?任何解决方法?需要谷歌来修复它吗?

android glsl shader vulkan spir-v
© www.soinside.com 2019 - 2024. All rights reserved.