小编Col*_*mbo的帖子

将为OpenGL ES版本编写的GLSL编译为Vulkan

我的问题类似于这个问题但是(有用的)给定答案的一部分与基于OpenGL ES ESSL 3.10编写基于漏洞的GLSL不兼容.

为了在顶点着色器和片段着色器中使用推送常量存储器的单独部分,建议的解决方案是在推送常量结构的第一个成员之前使用布局(offset =#).

尝试在GLSL ES 310代码中执行此操作会导致错误"'块成员上的偏移':此配置文件不支持:es".

是否有一种支持的方式来声明与es兼容的这种偏移?

我发现的唯一解决方法是在片段着色器中声明一堆虚拟变量.当我这样做时,如果我没有在VkPipelineLayoutCreateInfo中声明片段着色器的推送常量缓冲区的全部范围,则会出现验证层错误.修复之后,我得到关于"vkCreatePipelineLayout()调用具有重叠范围的推送常量"的验证层警告.

显然我可以忽略警告,但如果有一个更整洁的解决方案,那就更好了.

简单的例子,这与VulkanSDK\1.0.13.0\Bin\glslangValidator.exe成功编译:

#version 430
#extension GL_ARB_enhanced_layouts: enable

layout(std140, push_constant) uniform PushConstants
{
        layout(offset=64) mat4 matWorldViewProj;
} ubuf;

layout(location = 0) in vec4 i_Position;

void main() {
    gl_Position = ubuf.matWorldViewProj * i_Position;
}
Run Code Online (Sandbox Code Playgroud)

然而,这不是:

#version 310 es
#extension GL_ARB_enhanced_layouts: enable

layout(std140, push_constant) uniform PushConstants
{
        layout(offset=64) mat4 matWorldViewProj;
} ubuf;

layout(location = 0) in vec4 i_Position;

void main() {
    gl_Position = ubuf.matWorldViewProj * i_Position;
}
Run Code Online (Sandbox Code Playgroud)

将我的所有310 ES着色器代码转换为430将解决我的问题,但这不是理想的.GL_ARB_enhanced_layouts不适用于310 ES代码,所以我的问题不是为什么它不起作用,而是我在ES中有任何选项来实现相同的目标吗?

vulkan

6
推荐指数
1
解决办法
1226
查看次数

未使用Android App Bundle表示的Google Play崩溃日志

我们最近更新了我们的应用程序,以使用Android应用程序捆绑包(aab),还包括arm64本机库。

这样做以来,我们的崩溃记录在“ Google Play控制台”->“ Android Vitals”->“ ANR和崩溃”中的本机代码未正确表示(Java调用栈表示正常)。

一个典型的调用堆栈的片段如下所示:

  #21  pc 000000000015addc  /data/app/com.mycompany.mygame-2/split_config.arm64_v8a.apk
  #22  pc 0000000000293768  /data/app/com.mycompany.mygame-2/split_config.arm64_v8a.apk
  #23  pc 0000000000294cf0  /data/app/com.mycompany.mygame-2/split_config.arm64_v8a.apk
Run Code Online (Sandbox Code Playgroud)

该问题影响armv7和arm64的崩溃。有时,错误将具有正确符号化的调用堆栈,现在大约有10%被正确符号化。在使用AAB和arm64之前,我们已经看到几乎所有的调用栈都被正确地符号化了。

为了解决这个问题,我们研究了使用Crashlytics的方法,但是也很难以这种方式获得正确符号化的调用堆栈。由于我们之前没有使用过Crashlytics,因此我们很难知道它是否遇到相同的问题,或者我们是否只是错误地设置了Crashlytics。但是,此帖子表明其他用户可能在AAB和Crashlytics方面遇到了麻烦。

还有其他人遇到类似的困难吗?

有任何已知的解决方法吗?

是否有人更新为使用AAB,并且在Google Play控制台中看到崩溃报告符号没有任何问题?

android android-ndk google-play android-vitals android-app-bundle

6
推荐指数
1
解决办法
765
查看次数

何时使用VK_IMAGE_LAYOUT_GENERAL

我不清楚何时使用VK_IMAGE_LAYOUT_GENERAL是一个好主意,而不是转换到我即将执行的任何操作的最佳布局.目前,我的政策是始终过渡到最佳布局.

但是VK_IMAGE_LAYOUT_GENERAL存在.当我只在短时间内使用给定的布局时,也许我应该使用它.

例如,现在,我正在编写代码以使用vkCmdBlitImage生成mipmap.当我遍历执行vkCmdBlitImage命令的子资源时,我应该转换到VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,因为我缩小为mip,然后转换到VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,当我将成为下一个mip的源时,最后转换到VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL全部完成?这似乎是很多过渡,并且可能在VK_IMAGE_LAYOUT_GENERAL中生成mips更好.

我很欣赏答案可能是测量,但很难衡量我所有的目标GPU(特别是因为我还没有在Android上运行任何东西)所以如果有任何人有任何体面的经验法则可以应用它将非常感激.

FWIW,我正在编写将在桌面GPU和Android上运行的Vulkan代码,但我主要关注后者的性能.

vulkan

5
推荐指数
1
解决办法
960
查看次数