Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何正确使用Vulkan作为渲染API #169

Open
axojhf opened this issue Jan 4, 2024 · 18 comments
Open

如何正确使用Vulkan作为渲染API #169

axojhf opened this issue Jan 4, 2024 · 18 comments

Comments

@axojhf
Copy link

axojhf commented Jan 4, 2024

之前尝试在Avalonia里使用Vulkan作RenderAPI,但是没显示成功过
Avalonia的官方Vulkan示例里给外部提供了至少VkImage,想问MDK这边VulkanRenderAPI最少需要设置哪些部分才能正确渲染
(抱歉对Vulkan基本上一窍不通😂,单纯是想找一个最佳的集成方案)

@wang-bin
Copy link
Owner

wang-bin commented Jan 4, 2024

例子在哪

@axojhf
Copy link
Author

axojhf commented Jan 4, 2024

例子在哪

Avalonia官方那个是和Vulkan自定义渲染互操作的例子,和mdk这里没有关系,我是准备参考去集成的😂

@wang-bin
Copy link
Owner

wang-bin commented Jan 4, 2024

互操作没啥意义

@wang-bin
Copy link
Owner

wang-bin commented Jan 4, 2024

可以参考qmlrhi的例子

@axojhf
Copy link
Author

axojhf commented Jan 4, 2024

可以参考qmlrhi的例子

看过qmlrhi的例子
我这里尝试只设置VkImage那个参数的情况下,没有图像显示,有声音。
再尝试多设置了instance,phy_device,device。这次renderVideo调用几次后mdk动态库就出现了非法内存访问😂,暂时没排查出是哪里的问题。

所以就想问一下qmlrhi那里是最简单的调用方式了么,只用VkImage的情况下最少需要设置哪几个参数

@wang-bin
Copy link
Owner

wang-bin commented Jan 4, 2024

qmlrhi差不多是最简单的了,还有个vkwindow例子。vk很罗嗦,必须设一堆参数比如instance device,光一个image没法用,不像d3d metal可以通过资源获取关联设备和其它信息,opengl直接能获取当前上下文,vk啥都做不了

@axojhf
Copy link
Author

axojhf commented Jan 4, 2024

qmlrhi差不多是最简单的了,还有个vkwindow例子。vk很罗嗦,必须设一堆参数比如instance device,光一个image没法用,不像d3d metal可以通过资源获取关联设备和其它信息,opengl直接能获取当前上下文,vk啥都做不了

好的,那我再去研究研究。
主要是之前用dx11和OpenGL在avalonia集成mdk都感觉不是特别理想(试下来gpu占用最低的是avalonia支持不全面的wgl),就想看看vk下资源占用能不能少一点,不然也不太想碰vk

@wang-bin
Copy link
Owner

wang-bin commented Jan 4, 2024 via email

@wang-bin
Copy link
Owner

wang-bin commented Jan 5, 2024

最新的包MFT:d3d=11:shader_resource=1和D3D11:shader_resource=1可以显著降低gpu,但是amd显卡上有些奇怪的显示问题还没解决。窗口最大化gpu占用会增加比较明显,相比vlc和系统播放器增加得多,还不知道原因

@axojhf
Copy link
Author

axojhf commented Jan 5, 2024

最新的包MFT:d3d=11:shader_resource=1和D3D11:shader_resource=1可以显著降低gpu,但是amd显卡上有些奇怪的显示问题还没解决。窗口最大化gpu占用会增加比较明显,相比vlc和系统播放器增加得多,还不知道原因

确实gpu占用有一点下降,感谢

今天试了试Vulkan,成功在Avalonia里设置rt, renderTargetInfo, instance, device, graphics_queue没有报错,在没有设置currentCommandBuffer的情况下调用RenderVideo会报错,设置了之后不报错了,但是依然没有图像显示出来(有声音)😂,真不知道会是哪里设置不对了

@wang-bin
Copy link
Owner

wang-bin commented Jan 5, 2024

vlc gpu占用低有一个原因是解码和渲染用同一个逻辑设备,这是最理想的情况,处理起来会非常简单,mpv也是这么做的。我这边默认是解码和渲染用不同逻辑设备(后续也会加相同设备选项),glfwplay测试了下用d3d11解码、d3d11渲染到话性能上也能达到vlc、系统播放器的效果,但是还有几个设备间同步问题导致画面不对比较难解决,amd问题最多。用opengl渲染必然会导致性能下降,这个无解,要靠avalonia原生支持d3d11或d3d12

@wang-bin
Copy link
Owner

wang-bin commented Jan 5, 2024

最新的包MFT:d3d=11:shader_resource=1和D3D11:shader_resource=1可以显著降低gpu,但是amd显卡上有些奇怪的显示问题还没解决。窗口最大化gpu占用会增加比较明显,相比vlc和系统播放器增加得多,还不知道原因

确实gpu占用有一点下降,感谢

今天试了试Vulkan,成功在Avalonia里设置rt, renderTargetInfo, instance, device, graphics_queue没有报错,在没有设置currentCommandBuffer的情况下调用RenderVideo会报错,设置了之后不报错了,但是依然没有图像显示出来(有声音)😂,真不知道会是哪里设置不对了

装个vulkan sdk,在vkconfig里启用validation,然后mdk会把vk的错误打到日志里

@axojhf
Copy link
Author

axojhf commented Jan 5, 2024

好的,今天晚点时候我再试试

其实avalonia有一个开了4个月没动的Vulkan backend的pr,就不知道什么时候能正式支持vk了

@axojhf
Copy link
Author

axojhf commented Jan 6, 2024

Validation Error有个VUID-VkExportSemaphoreCreateInfo-handleTypes-01124
但是这个错误我在运行Avalonia官方Vulkan Demo的时候也有,但是那个Demo能正常显示,不知道是否有关
日志:
mdk.0.log

@wang-bin
Copy link
Owner

wang-bin commented Jan 6, 2024

这个是avalonia掉的,用于同步,应该没关系。我看日志里一直有No render pass, create one,正常情况下只会出现一次

@axojhf
Copy link
Author

axojhf commented Jan 12, 2024

想问一下render pass一般是什么情况下创建的,我观察我的日志是在渲染尺寸发生改变的情况下会报这个No render pass, create one的日志,目前我这里窗口每发生改变,都会新建一个vkimage

@axojhf
Copy link
Author

axojhf commented Jan 12, 2024

感觉好麻烦,还是我学艺不精,这个issue暂时先搁置在这里了,以后有能力看Vulkan了再说😂

@wang-bin
Copy link
Owner

setRenderAPI的时候如果没提供render_pass就会重置

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants