Giter Club home page Giter Club logo

vulkansharp's Introduction

VulkanSharp

This project provides a .NET binding for the Vulkan API.

Nuget package

Check our samples to see examples of using VulkanSharp

Tutorials

How to use Validation layers and Debug report extension

Building

Windows

To build VulkanSharp, open VulkanSharp.sln in Visual Studio and build the solution. Alternatively you can also build it on the command line, run the msbuild VulkanSharp.sln command. It should download the needed dependencies.

Mac/Linux

To build VulkanSharp, run the make command, which will download the needed dependencies.

Vulkan information

Specification from the Khronos group xhtml, pdf

To learn more about Vulkan, you can check Vulkan in 30 minutes

Vulkan on Android

Vulkan on Android (NVIDIA's devices) samples

More Android Vulkan samples googlesamples, examples and demos

vulkansharp's People

Contributors

akoeplinger avatar bholcomb avatar dellis1972 avatar iwandi avatar jonpryor avatar lyra1337 avatar mario-fuentes avatar migueldeicaza avatar pqnet avatar radekdoulik avatar terrajobst avatar tgsstdio avatar tillalex avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vulkansharp's Issues

Consider wrapping vulkan structs with C# structs, rather than classes

Can Vulkan "struct" types (e.g. PhysicalDeviceProperties, *CreateInfo) be wrapped in VulkanSharp with actual C# structs? It seems unnecessary to require a heap allocation for what is otherwise simply marshalling data in or out of the driver.

A (slightly) more detailed description of the structs I'm talking about may be: structs that essentially act as parameter lists for functions (e.g. *CreateInfo) or as a container for multiple return values from a function (e.g. PhysicalDeviceProperties).

SharpDX's DirectX12 wrappers wrap these kinds of structs with C# structs. What is wrapped with a class ends up being anything else that has a lifetime worth tracking (e.g. Direct3D12.Device, Direct3D12.PipelineState, etc).

Thanks for reading!

No entry point towards 'vkCreateInstance'.

Hello developers behind VulkanSharp!

I came to report an issue today that held me back from creating a Vulkan application.
The error is as following:

An unhandled exception of type 'System.EntryPointNotFoundException' occurred in Vulkan.dll
Additional information: Unable to find an entry point named 'vkCreateInstance' in DLL 'vulkan'.

I added an image on which Visual Studio gives me the error code. I hope this can be of any help.

vulkanerror_001

Out parameters and redundant alloc:

About a dozen such functions do this:

    public void ResetFences (UInt32 fenceCount, Fence pFences)
    {
        Result result;
        unsafe {
            pFences = new Fence ();

            fixed (UInt64* ptrpFences = &pFences.m) {
                result = Interop.NativeMethods.vkResetFences (this.m, fenceCount, ptrpFences);
            }
            if (result != Result.Success)
                throw new ResultException (result);
        }
    }

which should mark pfences as "out"

I really don't know the convention here. Is the object supposed to be allocated and returned or is the caller supposed to provide the object where the allocation would be redundant? Anyway, my tool is flagging this.

vk*EXT do not work

Tested CreateDebugReportCallbackEXT and DebugReportMessageEXT, both fail due to missing entry point. Calling them via GetProcAddress works.

Vulkan abstraction

Hi there,

is there an intention to write an abstraction over the raw api in the mono community?

Regards

odd code generation

Thanks for responding so shockingly immediately to last night's bug.

My expired trial version of a code checker flagged this little function as always returning false:

    public Bool32 GetSurfaceSupportKHR (UInt32 queueFamilyIndex, SurfaceKhr surface)
    {
        Result result;
        Bool32 pSupported;
        unsafe {
            pSupported = new Bool32 ();
            result = Interop.NativeMethods.vkGetPhysicalDeviceSurfaceSupportKHR (this.m, queueFamilyIndex, surface.m, &pSupported);
            if (result != Result.Success)
                throw new ResultException (result);

            return pSupported;
        }
    }

I'm trying to compile against .net 4.6. It's giving me grief about sizeof<>() ... but I'd tend to ignore most of those...

How are debug markers supposed to be used?

I've been trying to debug a program I have transliterated, and cannot get enough data about certain things (namely a graphics pipeline failing to compile a shader for some reason), what I cannot get is that debug markers are hidden and impossible to use, for instance:

		public DebugMarkerObjectNameInfoExt DebugMarkerSetObjectNameEXT ()
		{
			Result result;
			DebugMarkerObjectNameInfoExt pNameInfo;
			unsafe {
				pNameInfo = new DebugMarkerObjectNameInfoExt ();
				result = Interop.NativeMethods.vkDebugMarkerSetObjectNameEXT (this.m, pNameInfo != null ? pNameInfo.m : (Interop.DebugMarkerObjectNameInfoExt*)default(IntPtr));
				if (result != Result.Success)
					throw new ResultException (result);

				return pNameInfo;
			}
		}

exists in handles.cs, this setup prevents us from setting the object name as you would expect, since the command does not have any arguments, is there any reason for this? Is there a simple fix in the generator? I don't know, all I know is that this issue prevents me from debugging specifically my transliterated code (the code I transliterated from is fine, I know that for a fact)

Make Handle property public accessible

Description:

I cannot access the handles of the classes without using hacks (reflection.
This approach is not considerable for public libraries.

Why:

The access to the handle is needed to support external window libraries like GLFW which make cross-platform surface creation very easy.

How to fix:

Fixing this would require to making the Handle property of IMarshalling public in the various classes.

PS:
The Handle property from IMarshalling itself is already public however it is not generated as public in the classes.

Access Violation calling vkCmdPipelineBarrier

I am implementing the LunaG samples on c# and VulkanSharp. While implementing set_image_layout from util.cpp as SampleInstance.SetImageLayout i call CommandBuffer.CmdPipelineBarrier.

This gives me a Access Violation in the call to vkCmdPipelineBarrier.

Testing it a bit it dose not look like a simple AccessViolation on the call. Disabling parameters in the ImageMemoryBarrier allows me to make the call with a Failed result and a Errors in the Validation layer. But as soon as i supply all the Paramters as in set_image_layout i get the Access Violation. I am not shure if this is a bug in VulkanSharp, Vulkan or i Just did something wrong.

https://github.com/iwandi/Vulkan.SharpLang.Examples/blob/master/Vulkan.SharpLang.Examples/SamplesPlatform/SampleInstance.cs

PS : Samples : instance, enumerate, device, initcommandbuffer, initswapchain, depthbuffer, uniformbuffer and descriptor_pipeline_layouts run without errors.

GetFenceStatus() has no return type.

The wrapping method for vkGetFenceStatus (Vulkan Specs) looks like this:

public void GetFenceStatus (Fence fence) { Result result; unsafe { result = Interop.NativeMethods.vkGetFenceStatus (this.m, fence != null ? fence.m : default(UInt64)); if (result != Result.Success) throw new ResultException (result); } }

Source File

The return type VkResult is wrapped to throw an exception if the result is not VK_SUCCESS so we have to throw and catch the exception everytime we want to get the fence status.

Instance.EnableDebug(). NullPointerException.

I catch NullPointerException after instanse.EnableDebug().
GetProcAddr in Handles.cs returns Null for "vkCreateDebugReportCallbackEXT", "vkDestroyDebugReportCallbackEXT" and "vkDebugReportMessageEXT".

So InitializeFunctions in Additions.cs set "null" value for vkCreateDebugReportCallbackEXT and then when i call instanse.EnableDebug() the program crashes.

Code example:
http://ideone.com/txkBon

P.S. I didn't see the same closed issue, but it doesn't work now(check nuget version)

Invalid reference in SwapchainCreateInfoKhr

The ImageExtent field in the Interop.SwapchainCreateInfoKhr structure needs to be of type Extent2D, instead of an IntPtr to an Extent2D.

Unfortunately this isn't yet documented in the official spec, but it is in accordance with other source code I have found, and after testing it myself.

PipelineRasterizationStateRasterizationOrderAMD capitolization.

Hey, I'm not entirely sure how this is supposed to work yet, but when it generates the shiz it generates an enum.cs file with that symbol ending in "Amd" but when it goes to use it in Structs.cs it tries to call it as "AMD" which no workey.

I tried to trace this back through the generator but it is not clear how this happened.

ImageCreateFlags --- error CS1001: Identifier expected

Found: "error CS1001: Identifier expected" when compiling the repo tip.

Appears to relate to a leading "2D" being emitted in the final generated entry:

[Flags]
public enum ImageCreateFlags : int
{
	SparseBinding = 0x1,
	SparseResidency = 0x2,
	SparseAliased = 0x4,
	MutableFormat = 0x8,
	CubeCompatible = 0x10,
	2DArrayCompatibleKhr = 0x20,
}

...thus an invalid token.

This was built with the latest VS2017RC (not sure that matters).

Fails to build with 1.0.38 spec

I was following the build instructions and it looks like the latest spec is causing the generator some issues. Specifically, it looks like some new NVX extensions are causing the problem. Not sure if the warnings are anything to worry about.

Would it be a good idea to check in the vk.xml that the project is tested with? Might prevent these types of issues.

Here is my build output:

1> Specification file ....\bin\Release\vk.xml loaded
1>EXEC : warning : not adding empty enum VkFramebufferCreateFlagBits
1>EXEC : warning : not adding empty enum VkQueryPoolCreateFlagBits
1>EXEC : warning : not adding empty enum VkRenderPassCreateFlagBits
1>EXEC : warning : not adding empty enum VkSamplerCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineLayoutCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineCacheCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineDepthStencilStateCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineDynamicStateCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineColorBlendStateCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineMultisampleStateCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineRasterizationStateCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineViewportStateCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineTessellationStateCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineInputAssemblyStateCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineVertexInputStateCreateFlagBits
1>EXEC : warning : not adding empty enum VkPipelineShaderStageCreateFlagBits
1>EXEC : warning : not adding empty enum VkDescriptorSetLayoutCreateFlagBits
1>EXEC : warning : not adding empty enum VkBufferViewCreateFlagBits
1>EXEC : warning : not adding empty enum VkInstanceCreateFlagBits
1>EXEC : warning : not adding empty enum VkDeviceQueueCreateFlagBits
1>EXEC : warning : not adding empty enum VkDeviceCreateFlagBits
1>EXEC : warning : type name 'MirConnection' doesn't start with Vk prefix or end with _t suffix
1>EXEC : warning : type name 'wl_display' doesn't start with Vk prefix or end with _t suffix
1>EXEC : warning : type name 'Display' doesn't start with Vk prefix or end with _t suffix
1>EXEC : warning : type name 'VisualID' doesn't start with Vk prefix or end with _t suffix
1>EXEC : warning : type name 'MirConnection' doesn't start with Vk prefix or end with _t suffix
1>EXEC : warning : type name 'wl_display' doesn't start with Vk prefix or end with _t suffix
1>EXEC : warning : type name 'Display' doesn't start with Vk prefix or end with _t suffix
1>EXEC : warning : type name 'VisualID' doesn't start with Vk prefix or end with _t suffix
1>C:\source\VulkanSharp\src\Vulkan\Handles.cs(555,230,555,248): error CS1750: A value of type '' cannot be used as a default parameter because there are no standard conversions to type 'ExternalMemoryHandleTypeFlagsNv'
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(7514,10,7514,45): error CS0246: The type or namespace name 'IndirectCommandsLayoutUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Interop\MarshalStructs.cs(1068,12,1068,47): error CS0246: The type or namespace name 'IndirectCommandsLayoutUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(7556,12,7556,56): error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('IndirectCommandsLayoutCreateInfoNVX')
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(7831,10,7831,34): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(7929,10,7929,34): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(7939,10,7939,34): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Interop\MarshalStructs.cs(1116,12,1116,36): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(7949,12,7949,48): error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('ObjectTablePipelineEntryNVX')
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(7982,10,7982,34): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Interop\MarshalStructs.cs(1123,12,1123,36): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(7998,12,7998,53): error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('ObjectTableDescriptorSetEntryNVX')
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(8031,10,8031,34): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Interop\MarshalStructs.cs(1131,12,1131,36): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(8041,12,8041,52): error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('ObjectTableVertexBufferEntryNVX')
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(8074,10,8074,34): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Interop\MarshalStructs.cs(1138,12,1138,36): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(8084,12,8084,51): error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('ObjectTableIndexBufferEntryNVX')
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(8117,10,8117,34): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Interop\MarshalStructs.cs(1145,12,1145,36): error CS0246: The type or namespace name 'ObjectEntryUsageFlagsNVX' could not be found (are you missing a using directive or an assembly reference?)
1>C:\source\VulkanSharp\src\Vulkan\Structs.cs(8132,12,8132,52): error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('ObjectTablePushConstantEntryNVX')
1>C:\source\VulkanSharp\src\Vulkan\Interop\ImportedCommands.cs(522,90,522,126): error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('IndirectCommandsLayoutCreateInfoNVX')
1>C:\source\VulkanSharp\src\Vulkan\Interop\ImportedCommands.cs(534,117,534,137): error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('ObjectTableEntryNVX')

cheers,

Bob

Consider a pattern for extending external surface creation

I'm using GLFW (with c# bindings), to create a surface, using the glfwCreateWindowSurface method. However since the SurfaceKhr constructor is internal, I am unable to implement the same pattern used to create the surface in the CreateWin32SurfaceKHR extension method, from a separate project.

My solution was to create a simple factory in helpers.cs, which allows a UInt64/ulong to be passed in and returns a new SurfaceKhr. I'm not sure if this is the best pattern to use in this circumstance, so any other alternative suggestion would suffice.

The other issue is, that the ResultException constructor is internal, I simply made this public, however again, any other alternative will suffice.

The code I intend to write is:

namespace Glfw3
{
    using System;
    using System.Runtime.InteropServices;
    using System.Security;
    using Vulkan;

    public static partial class Glfw
    {
        private struct VkAllocationCallbacks
        {
            private IntPtr UserData;
            private IntPtr PfnAllocation;
            private IntPtr PfnReallocation;
            private IntPtr PfnFree;
            private IntPtr PfnInternalAllocation;
            private IntPtr PfnInternalFree;
        }

        public static SurfaceKhr CreateWindowSurface(Instance instance, Window window, AllocationCallbacks allocationCallbacks = null)
        {
            Result result;
            ulong pSurface;

            unsafe
            {
                var ptrpSurface = &pSurface;
                var pAlloactor = allocationCallbacks != null ? (VkAllocationCallbacks*)((IMarshalling)allocationCallbacks).Handle : null;

                result = glfwCreateWindowSurface(((IMarshalling)instance).Handle, window, pAlloactor, ptrpSurface);

                if (result != Result.Success)
                {
                    throw new ResultException(result);
                }

                return SurfaceKhrFactory.CreateSurface(pSurface);
            }
        }

        [DllImport(kLibrary, CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
        private static extern unsafe Result glfwCreateWindowSurface(IntPtr instance, [MarshalAs(UnmanagedType.Struct)] Window window, VkAllocationCallbacks* pAllocator, ulong* surface);
    }
}

The modifications that I made to helpers.cs, (in order for the above code to work) are:

public class ResultException : Exception
{
    internal Result result;

    public Result Result
    {
        get { return result; }
    }

    public ResultException(Result res)
    {
        result = res;
    }
}

...

public static class SurfaceKhrFactory
{
    public static SurfaceKhr CreateSurface(ulong pSurface)
    {
        return new SurfaceKhr
        {
            m = pSurface
        };
    }
}

Unmanaged memory. Leaking.

Hello.

I have this code in my project:

http://ideone.com/gjfaoD

And after using dotMemory i found memory leaking.
I explored generated code and found several moments:
First, method "set" at WaitSemaphores in SubmitInfo allocate memory by calling Marshal.AllocHGlobal(...) and never call Marshal.FreeHGlobal(...) .
And other "set" method too.
Second, costructor of SubmitInfo allocate memory and never free it. (using Marshal.AllocHGlobal)

Finally, you can find same situtation in other structs.

make Instance disposable

Should Instance class be disposable, and executed Destroy at dispose time, since has ownership on unmanaged resources?

Make AllocationCallbacks optional

In most of the calls where AllocationCallbacks is used parameter would be great to have it as optional, IE: DestroyPipelineCache etc

MakeFile: nmake support

Please add support for nmake.
Apparently the "wildcard" parameter does not exist in nmake.

Netcore support

I am not sure this can be done, but is there any plan to make the NuGet package compatible with NETCore apps?

Currently, trying to dotnet restore a project referencing the VulkanSharp NuGet package gives the following output:

Package VulkanSharp 0.1.7 is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package VulkanSharp 0.1.7 supports:
      - monoandroid10 (MonoAndroid,Version=v1.0)
      - net452 (.NETFramework,Version=v4.5.2)
      - portable-net45+win8 (.NETPortable,Version=v0.0,Profile=Profile7)
      - win8 (Windows,Version=v8.0)

Linux Platform

Hey all,

I've been looking through the source here and I've noticed that only Windows and Android N have dedicated platform support, but there's also a platform extension set generated for Linux. What's the process for using this vs. Windows?

Flags often have to be casted to uint

Would be nice if Flags fields of create infos have the type of the corresponding enum instead of uint. Perhaps it would also be good to add a None = 0 element to all Flags enums.

PhysicalDeviceMemoryProperties does not match specs

Reading the specs I found that PhysicalDeviceMemoryProperties should have:

VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES];
VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS];

In the generator I found that fixed array of structs is not implemented yet. Furthermore non numeric sizes like VK_MAX_MEMORY_TYPES are not parsed yet. This is quite a show stopper because querying vkGetPhysicalDeviceMemoryProperties is not possible yet.

lots of pointers not fixed when passed to native functions

For example pBeginInfo passes vkBeginCommandBuffer without fixing. If GC is running and moving the memory during this call, the program crashes. This happens very often as soon as a second thread is running and allocating memory.
Sadly, this makes the VulkanSharp Bindings unusable for multi threaded code.

Getting screenshots

Hi, I'm trying to obtain the image data from vulkan as I do right now using the ReadPixels function, do anyone know how to do this, I need this in order to use it as I want in WPF in order to store the data in a WriteableBitmap.

Thanks a lot.

Where is docs ?

Hello. I interested in your library. But i don't found docs for it. Where can i find this docs ?

queue.Submit (submitInfo, fence) segfaulting

Android version deployed to Nougat device, getting segfault on first Submit() call in DrawFrame().
"Got a SIGSEGV while executing native code". Any ideas what to check?

This is VS'17, JDK1.8, NDK13

Could not load assembly 'Vulkan'

Getting this error with VS2015 and NDK-11d:

Severity Code Description Project File Line Suppression State
Error The "ResolveLibraryProjectImports" task failed unexpectedly.
System.IO.FileNotFoundException: Could not load assembly 'Vulkan, Version=0.0.0.0, Culture=neutral, PublicKeyToken='. Perhaps it doesn't exist in the Mono for Android profile?
File name: 'Vulkan.dll'
at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters) in /Users/builder/data/lanes/5147/c2a33d8e/source/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:line 220
at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(String fullName) in /Users/builder/data/lanes/5147/c2a33d8e/source/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:line 160
at Xamarin.Android.Tasks.ResolveLibraryProjectImports.Extract(DirectoryAssemblyResolver res, ICollection1 jars, ICollection1 resolvedResourceDirectories, ICollection1 resolvedAssetDirectories, ICollection1 resolvedEnvironments)
at Xamarin.Android.Tasks.ResolveLibraryProjectImports.Execute()
at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext() Vulkan.Android

Hide default constructors

It seems like many VulkanSharp objects created with the default constructor end up being invalid and should instead be made with their associated factory methods.

Should the default constructors for these objects (e.g. PhysicalDevice, SurfaceKhr, etc) be private or internal?

Overloading methods taking arrays of elements to also take single elements

There are lots of functions taking arrays as arguments, which I often use with single elements.

For example vkCmdBindDescriptorSets takes an array of descriptor sets, but in most cases I only pass a single one. In all this cases I have to create an array for a single element. I guess this leads to lots of unnecessary array constructions and garbage collector runs.

Perhaps its possible to overload this functions to also take single elements.

Can't build. Missing vk.xml file.

I can't build using Visual Studio or gnu make, because the vk.xml file is missing.
It is not contained in the VulkanSharp repo. Were do i find it?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.