Khanattila / KNLMeansCL

An optimized OpenCL implementation of the Non-local means de-noising algorithm
GNU General Public License v3.0
106 stars 22 forks source link

Don't work with AMD RX Vega GPU #26

Open ghost opened 7 years ago

ghost commented 7 years ago

Using KNLMeansCL 1.1.0 on Windows 10 1709 x64 with AMD 17.10.3 driver Tested with a simple VapourSynth script:

import vapoursynth as vs core = vs.get_core() src = core.lsmas.LWLibavSource('IMG_1532.MOV') kn = core.knlm.KNLMeansCL(src) output = core.std.Interleave([src, kn]) output.set_output()

Original frame: https://imgur.com/1QqdII0 knlm's output: https://imgur.com/WuQbMPI

There is no problems by changing device_type to cpu.

fantacinni commented 4 years ago

Same issue here, GPU: AMD Navi10 RX5700 KNLMeansCL Version: 1.1.1 Vapoursynth Version: R48 OS: Manjaro Linux Driver: AMDGPU-Pro 19.30

import vapoursynth as vs core = vs.get_core() clip = core.lsmas.LibavSMASHSource("20171212221136_01.mp4") denoised = core.knlm.KNLMeansCL(clip, device_type="GPU") output = core.std.Interleave([clip,denoised]) output.set_output()

Original frame: https://imgur.com/oFqGaPD Processed frame: https://imgur.com/0fzgHhy

But if I convert input to RGB before KNLMeansCL, after that convert back to YV12, the output will not be broken.

import vapoursynth as vs core = vs.get_core() clip = core.lsmas.LibavSMASHSource("20171212221136_01.mp4") rgb24 = core.resize.Point(clip, format=vs.RGB24, matrix_in_s="709", chromaloc_in_s="top_left") denoised = core.knlm.KNLMeansCL(rgb24, device_type="GPU") yv12= core.resize.Point(denoised, format=vs.YUV420P8, matrix_s="709", chromaloc_s="top_left") output = core.std.Interleave([clip,yv12]) output.set_output()

Process frame (same as above): https://imgur.com/SyU4pZG

Khanattila commented 4 years ago

Thank fantacinni, I also bought a Navi10 but I still haven't had a chance to test on it. I hope that solving the problem on Navi will also solve the problem on Vega.

fantacinni commented 4 years ago

Hi Khanattila, I did some testing on YUV480P8 with NAVI10, it goes very interesting... Tested with common aspect ratio with X-axis/Y-axis not changed, I've found there are some X-axis resolutions will always work as normal.

Working X-axis resolutions includes: 240, 300, 360, 426, 600, 720, 854, 900, 1080, 1350, 1584, 1620.

Here's a spreadsheet of results. https://drive.google.com/file/d/1uBfGoxmQu-unLwxPDiWuqKH3VliCa_G8/view?usp=sharing

Morpheus1123 commented 4 years ago

Hello. My GPU is Radeon RX Vega 64. Driver is 20.4.1. I find that this issue occurs only with “channels="Y" or no “channels” parameter(because "channels" default is "Y"). When I convert the YUV clip to RGB and set KnlMeansCL “channels="RGB", It seems to work fine, no bugs. When I input YUV clip to KnlMeansCL and set “channels="UV", It also seems to work fine. Only "Y", the issue is always black screen with some little red shadow , and sometimes is broken colorful frame. I also find similar issue occurs on VapourSynth-NNEDI3CL when I set planes=[0] or [1] or [2] or [0,1]........ . Planes=[0, 1, 2] is no problem.

I hope these information is useful to you.

fantacinni commented 4 years ago

Hello, Seems the issue was solved by updating ROCm suite. I'm running Manjaro and updated rocm-dkms package from AUR, and KnlMeansCL output is as expected.

vdolekk commented 2 years ago

This still not working on 6800XT under windows10/11. Still same problem as OP.