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

Barracuda OPENGL native errors on Android #21

Closed
wojciechp6 opened this issue Feb 12, 2020 · 4 comments
Closed

Barracuda OPENGL native errors on Android #21

wojciechp6 opened this issue Feb 12, 2020 · 4 comments

Comments

@wojciechp6
Copy link

Hi! I've encountered some issues while developing mobile detection app.
On my device Xiaomi Redmi Note 4 in logs appear two errors:

  • On NN interference start there are
    `-------- GLSL link error: Warning: barrier used in non-uniform control flowWarning: barrier used in non-uniform control flow

UnityEngine.Resources:Load(String, Type)
UnityEngine.Resources:Load(String) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Resources/Resources.bindings.cs:46)
Barracuda.ComputeShaderSingleton:LoadIf(Boolean, String) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\ComputeShaderSingleton.cs:38)
Barracuda.ComputeShaderSingleton:LoadIf(Boolean, String, List`1) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\ComputeShaderSingleton.cs:45)
Barracuda.ComputeShaderSingleton:.ctor() (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\ComputeShaderSingleton.cs:24)
Barracuda.ComputeShaderSingleton:.cctor() (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\ComputeShaderSingleton.cs:11)
Barracuda.BarracudaBackendsFactory:CreateOps(Type, ITensorAllocator, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\BarracudaBackendsFactory.cs:50)
Barracuda.BarracudaBackendsFactory:CreateWorker(Type, Model, String[], String[], Boolean, Type) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\BarracudaBackendsFactory.cs:99)
Barracuda.WorkerFactory:CreateWorker(Type, Model, String[], String[], Boolean, Type) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:331)
Barracuda.WorkerFactory:CreateWorker(Model, String[], String[], Device, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:345)
Barracuda.WorkerFactory:CreateWorker(Model, String[], Device, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:426)
Barracuda.WorkerFactory:CreateWorker(Model, Device, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:414)
Barracuda.WorkerFactory:CreateWorker(Model, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:403)
NNHandler:.ctor(NNModel) (at C:\Users\Kuuupa\YOLO\Assets\Scripts\NN\NNHandler.cs:13)
NNImageHandler:Start() (at C:\Users\Kuuupa\YOLO\Assets\Scripts\NNImageHandler.cs:33)

[./Runtime/GfxDevice/opengles/ApiGLES.cpp line 687]
(Filename: /Users/builduser/buildslave/unity/build/Runtime/Export/Resources/Resources.bindings.cs Line: 46)`

and

ERROR: Unable to link compute shader: Dense.Dense_T16x16_R4x4 UnityEngine.Resources:Load(String, Type) UnityEngine.Resources:Load(String) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Resources/Resources.bindings.cs:46) Barracuda.ComputeShaderSingleton:LoadIf(Boolean, String) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\ComputeShaderSingleton.cs:38) Barracuda.ComputeShaderSingleton:LoadIf(Boolean, String, List1) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\ComputeShaderSingleton.cs:45)
Barracuda.ComputeShaderSingleton:.ctor() (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\ComputeShaderSingleton.cs:24)
Barracuda.ComputeShaderSingleton:.cctor() (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\ComputeShaderSingleton.cs:11)
Barracuda.BarracudaBackendsFactory:CreateOps(Type, ITensorAllocator, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\BarracudaBackendsFactory.cs:50)
Barracuda.BarracudaBackendsFactory:CreateWorker(Type, Model, String[], String[], Boolean, Type) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\BarracudaBackendsFactory.cs:99)
Barracuda.WorkerFactory:CreateWorker(Type, Model, String[], String[], Boolean, Type) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:331)
Barracuda.WorkerFactory:CreateWorker(Model, String[], String[], Device, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:345)
Barracuda.WorkerFactory:CreateWorker(Model, String[], Device, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:426)
Barracuda.WorkerFactory:CreateWorker(Model, Device, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:414)
Barracuda.WorkerFactory:CreateWorker(Model, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Barracuda.cs:403)
NNHandler:.ctor(NNModel) (at C:\Users\Kuuupa\YOLO\Assets\Scripts\NN\NNHandler.cs:13)
NNImageHandler:Start() (at C:\Users\Kuuupa\YOLO\Assets\Scripts\NNImageHandler.cs:33)

[./Runtime/GfxDevice/opengles/GfxDeviceGLES.cpp line 2571]
(Filename: /Users/builduser/buildslave/unity/build/Runtime/Export/Resources/Resources.bindings.cs Line: 46)
`
one after another.

And on end of interference there is
`allocation 0x0xc0000001 already registered @ ./Runtime/GfxDevice/opengles/DataBuffersGLES.cpp:l234 size 4096; now calling from ./Runtime/GfxDevice/opengles/DataBuffersGLES.cpp:l234 size 84500?
UnityEngine.ComputeBuffer:InitBuffer(Int32, Int32, ComputeBufferType, ComputeBufferMode)
UnityEngine.ComputeBuffer:.ctor(Int32, Int32, ComputeBufferType, ComputeBufferMode, Int32) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Shaders/ComputeShader.bindings.cs:90)
UnityEngine.ComputeBuffer:.ctor(Int32, Int32) (at /Users/builduser/buildslave/unity/build/Runtime/Export/Shaders/ComputeShader.bindings.cs:65)
Barracuda.ComputeTensorData:.ctor(TensorShape, String, Boolean) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\BarracudaReferenceCompute.cs:37)
Barracuda.ReferenceComputeOps:Pin(Tensor) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\BarracudaReferenceCompute.cs:550)
Barracuda.ComputeOps:Conv2D(Tensor, Tensor, Tensor, Int32[], Int32[]) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\BarracudaCompute.cs:654)
Barracuda.PrecompiledComputeOps:Conv2D(Tensor, Tensor, Tensor, Int32[], Int32[]) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\BarracudaPrecompiledCompute.cs:235)
Barracuda.VerboseOps:Barracuda.IOps.Conv2D(Tensor, Tensor, Tensor, Int32[], Int32[]) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\VerboseOps.cs:40)
Barracuda.d__27:MoveNext() (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\GenericWorker.cs:204)
Barracuda.GenericWorker:Execute() (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\GenericWorker.cs:117)
Barracuda.GenericWorker:Execute(Tensor) (at C:\Users\Kuuupa\YOLO\Library\PackageCache\com.unity.barracuda@0.5.0-preview\Barracuda\Core\Backends\GenericWorker.cs:111)
NNImageHandler:Update() (at C:\Users\Kuuupa\YOLO\Assets\Scripts\NNImageHandler.cs:43)

[./Runtime/Allocator/MemoryManager.cpp line 1645]
(Filename: /Users/builduser/buildslave/unity/build/Runtime/Export/Shaders/ComputeShader.bindings.cs Line: 90)
`
But these 3 errors didn't occur on another tested device that is Huawei Mate 10.

Another have place if I try run WebCamTexture together with Barracuda Worker on my Xiaomi :
`
OPENGL NATIVE PLUG-IN ERROR: GL_INVALID_ENUM: enum argument out of range
UnityEngine.WebCamTexture:INTERNAL_CALL_Play(WebCamTexture)
UnityEngine.WebCamTexture:Play() (at /Users/builduser/buildslave/unity/build/artifacts/Android/modules/Audio/UnityEngineWebCamTextureBindings.gen.cs:63)
NNImageHandler:Start() (at C:\Users\Kuuupa\YOLO\Assets\Scripts\NNImageHandler.cs:30)

[./Runtime/GfxDevice/opengles/GfxDeviceGLES.cpp line 348]
(Filename: /Users/builduser/buildslave/unity/build/artifacts/Android/modules/Audio/UnityEngineWebCamTextureBindings.gen.cs Line: 63)

`
I have no idea if these errors have something in common so I post them as one issue.

They didn't occur also on my laptop while testing.
I use YOLOv2 Tiny network, downloaded already in onnx format.

@mantasp
Copy link
Contributor

mantasp commented Feb 13, 2020

Some of these errors might appear on mobile devices, as some of compute kernels are too complex for simpler mobile GPUs, but in many cases Barracuda should fallback to some less complicated implementation.
Does Barracuda produce outputs you would expect or do exceptions break execution completely?

@wojciechp6
Copy link
Author

My phone supports OpenGLES 3.2, so if
the error appear depends on something more than ES version?

Exception allocation 0x0xc0000001 already registered causes app kill so there aren't any output.

@mantasp
Copy link
Contributor

mantasp commented Apr 28, 2020

At the moment we dropped GLES support on Android and focusing on Vulkan instead. Please let us know if Vulkan doesn't work for you.

@mantasp mantasp closed this as completed Apr 28, 2020
@wojciechp6
Copy link
Author

I have updated project to barracuda 0.7.0 and sadly the error still occur. I have tested lately and I noticed that first frame pass without problem but on second appears crash with the same error.
As I run inference only once on start the allocation error also appears but doesn't cause crash.
I have uploaded the project so you can check this by yourself. https://github.com/wojciechp6/YOLO-UnityBarracuda

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