wang-bin / mdk-sdk

multimedia development kit. download:
https://sourceforge.net/projects/mdk-sdk/files/
290 stars 32 forks source link

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

Open axojhf opened 10 months ago

axojhf commented 10 months ago

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

wang-bin commented 10 months ago

例子在哪

axojhf commented 10 months ago

例子在哪

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

wang-bin commented 10 months ago

互操作没啥意义

wang-bin commented 10 months ago

可以参考qmlrhi的例子

axojhf commented 10 months ago

可以参考qmlrhi的例子

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

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

wang-bin commented 10 months ago

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

axojhf commented 10 months ago

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

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

wang-bin commented 10 months ago

vk硬解渲染相关的还不支持,不如dx gl。gpu占用多少?期望多少?

获取Outlook for Androidhttps://aka.ms/AAb9ysg


From: Axojhf @.> Sent: Thursday, January 4, 2024 11:45:10 PM To: wang-bin/mdk-sdk @.> Cc: WangBin @.>; Comment @.> Subject: Re: [wang-bin/mdk-sdk] 如何正确使用Vulkan作为渲染API (Issue #169)

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

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

― Reply to this email directly, view it on GitHubhttps://github.com/wang-bin/mdk-sdk/issues/169#issuecomment-1877317316, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAF7WNS5IQTSETK5RKMYSB3YM3FANAVCNFSM6AAAAABBM2BPB6VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQNZXGMYTOMZRGY. You are receiving this because you commented.Message ID: @.***>

wang-bin commented 10 months ago

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

axojhf commented 10 months ago

最新的包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 commented 10 months ago

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

wang-bin commented 10 months ago

最新的包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 commented 10 months ago

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

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

axojhf commented 10 months ago

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

wang-bin commented 10 months ago

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

axojhf commented 10 months ago

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

axojhf commented 10 months ago

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

wang-bin commented 10 months ago

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