Commit graph

5277 commits

Author SHA1 Message Date
Stefanos A
7487aab4d9 Correct convenience wrapper implementation 2013-12-04 22:26:30 +01:00
Stefanos A
e2801c8c6c Convert string[] callsites to IntPtr
This fixes the signature mismatch between the new marshaling code and
the callsites.
2013-12-04 21:22:33 +01:00
Stefanos A
f15c9ecb95 Implemented marshaling for string arrays
This allows functions such as GL.ShaderSource to run on Mono without
crashing.
2013-12-04 20:33:19 +01:00
Stefanos A
406de0b846 Regenerated bindings 2013-12-03 09:10:45 +01:00
Stefanos A
4286b47d6f Clean up wrapper generation
We can now apply multiple WrapperTypes values to a single parameter.
2013-12-03 09:10:36 +01:00
Stefanos A
e178f306eb Update WrapperTypes values for [Flags] 2013-12-03 09:09:19 +01:00
Stefanos A
33874c2d6d Removed duplicate ldarg 2013-12-03 08:59:48 +01:00
Stefanos A
78c0c0d16e Removed unused code 2013-12-02 16:30:14 +01:00
Stefanos A
48efbed1e3 Added MonoDevelop project policy 2013-12-02 12:00:11 +01:00
Stefanos A
d5137d6057 Initial implementation of manual StringBuilder marshaling (WIP)
The implementation is based on Marshal.AllocHGlobal and
Marshal.FreeHGlobal. This is not working correctly yet.
2013-12-02 11:59:40 +01:00
Stefanos A
45cdc2c1cd Added manual marshaling for StringBuilder
Mono fails to marshal StringBuilder arguments in unmanaged callsites
invoked through calli. We need to implement the marshaling code
ourselves.
2013-12-02 11:58:41 +01:00
Stefanos A
6ccab1784f Use StdCall calling convention by default
It appears that calli callsites cannot be decorated with the
“platformapi” calling convention like DllImport signatures can. This is
problematic since Windows uses stdcall by default and most other
platforms use cdecl.

There are three approaches to this issue, without going back to
delegate calls: (a) generate an unmanaged thunk that cleans up the
stack after a GL call; (b) use libFFI; (c) use cdecl *or* stdcall
everywhere and hope that the runtime can cope.

.Net 2.0 can detect and fix stdcall functions invoked through a cdecl
callsite. .Net 4.0 adds a configuration option to enable or disable
this fixup (faster p/invoke if disabled) and raise a MDA exception when
this condition is detected. (This affects x86 only.)

Mono appears to be able to cope with cdecl functions invoked through a
stdcall callsite.

More testing is required.
2013-12-01 21:25:03 +01:00
Stefanos A
438f83c8d9 Mark slots with [DllImport]; remove "core" and "delegates" generation
We should be able to use static pinvokes on platforms that do not
provide or require extensions and calli instructions on platforms with
extension APIs. This dinstiction will be implemented as a parameter in
the rewriter.
2013-12-01 21:17:15 +01:00
Stefanos A
d6bf7c0d78 Regenerated bindings 2013-12-01 18:28:25 +01:00
Stefanos A
12c9c14133 Enabled symbol generation; minor code cleanup 2013-12-01 18:28:11 +01:00
Stefanos A
2290e06cbd Use untyped int for enums in unmanaged callsites
By using untyped integers instead of typed integers in the unmanaged
callsites, we allow monolinker to keep the exact set of enums that are
used by the user. Without this, we’d have to keep every single enum in
place to avoid missing type exceptions.

This does not affect the public signatures or the generated code in any
way.
2013-12-01 18:26:01 +01:00
Stefanos A
6f535ec095 Load system types from referenced mscorlib 2013-11-30 02:32:10 +01:00
Stefanos A.
76f0782fb1 Use C calling convention even on Windows 2013-11-30 02:16:34 +01:00
Stefanos A.
31d14cebff Corrected the handling of arrays
This includes arrays of primitives and arrays of generics. Our code is
similar to the code generated by the Mono C# compiler for the "fixed"
construct. The .Net compiler produces slightly different code (two local
variables instead of one) - more research is required.
2013-11-30 02:00:07 +01:00
Stefanos A.
0d9df5ad72 Refactored il emitters into methods 2013-11-29 19:24:38 +01:00
Stefanos A.
78c0c6fd4c Use unmanaged StdCall calling convention
Default results in a managed calling convention which does not generate
unmanaged thunking code for parameter marshaling.
System.Runtime.InteropServices.CallingConvention.Winapi appears to
correspond to StdCall for calli callsites (this might be different for
pinvoke, which supports an unmanaged "platformapi" calling convention.)
Needs more testing to prove this is doing the right thing on non-Windows
platforms.
2013-11-29 19:11:52 +01:00
Stefanos A.
c6d59b1f29 Removed deleted file from project 2013-11-28 23:23:03 +01:00
Stefanos A.
0a39143b3e Removed unused WGL methods
WGL was autogenerated a few years ago but never touched after that.
Since we use a tiny fraction of all available methods, it makes sense to
remove the unused ones. This reduces dll size and improves startup
times.
2013-11-28 23:22:35 +01:00
Stefanos A.
c53c0bc66f Added GetProcAddress(IntPtr) overloads
This might allow us to improve startup performance, by avoiding string
marshaling during extension loading.
2013-11-28 23:21:19 +01:00
Stefanos A.
8b8ea714ee Fixed wglGetProcAddress entry point
A typo would cause extension loading to fail. This is now fixed.
2013-11-28 09:04:08 +01:00
Stefanos A.
7775fa64aa Removed unused WGL bindings
Our WGL bindings contained dozens of methods that OpenTK did not use.
Removing these reduces the dll size and improves startup times.
2013-11-27 19:37:59 +01:00
Stefanos A.
9c7e5201db Fixed entry point validity check 2013-11-27 19:36:42 +01:00
Stefanos A.
fb99c7d7a1 Enable InitLocals to make peverify happy 2013-11-27 09:16:23 +01:00
Stefanos A.
e48a624003 Fixed convenience return type implementation 2013-11-27 09:09:33 +01:00
Stefanos A.
ec67232e88 Corrected RewrittenAttribute definition 2013-11-27 08:45:28 +01:00
Stefanos A.
f5b33b6487 Build 3.5 profile with Visual Studio 2013-11-27 08:28:39 +01:00
Stefanos A.
6bde1beb91 Rewrite nested types
Fixes zero-RVA exception for OpenGL extensions (e.g. GL.Ext etc)
2013-11-27 08:28:22 +01:00
Stefanos A.
c369bfc75e Use [AutoGenerated] only for generated methods
The rewriter will patch the body of methods marked with [AutoGenerated].
Methods that are implemented manually (e.g. various math helper
overloads) should avoid this attribute.
2013-11-27 08:27:52 +01:00
Stefanos A
daf5b828c9 Implemented string return types 2013-11-27 01:40:12 +01:00
Stefanos A
ac65eb7b09 Added MonoDevelop artifacts 2013-11-27 00:05:26 +01:00
Stefanos A
da4de365e8 Regenerated bindings 2013-11-27 00:03:21 +01:00
Stefanos A
4f58348502 Implemented convenience wrapper types 2013-11-27 00:03:03 +01:00
Stefanos A
82b0b477da Emit native signatures
The patcher uses those signatures to implement wrapper functionality
for the various wrapper types that exist in OpenTK.
2013-11-27 00:02:26 +01:00
Stefanos A
bb7980b6a9 Update to latest version from git 2013-11-26 19:07:01 +01:00
Stefanos A
83868b45c6 Protect against multiple runs; optimize il 2013-11-26 19:06:39 +01:00
Stefanos A
4149cdfa88 Do not emit method bodies. 2013-11-26 01:31:29 +01:00
Stefanos A
40f992b5bd Rewrite support for [Slot] attribute 2013-11-26 01:31:10 +01:00
Stefanos A.
84a1e5a739 Initial work on Pin<> statements (WIP) 2013-11-25 20:00:22 +01:00
Stefanos A.
bb15844deb Fixed build on Visual Studio 2013-11-25 10:06:10 +01:00
Stefanos A
27d5e7a43e Applied MonoDevelop project style 2013-11-25 08:54:15 +01:00
Stefanos A
997f390ec1 Corrected keyfile path 2013-11-25 08:53:44 +01:00
Stefanos A
793dac65e5 Corrected patch for CallReturn<TRet, ...> signatures
.Net will happily execute a calli with a generic return type, whereas
Mono will refuse to. Mono is probably doing the right thing here. Fixed
by resolving the generic return into a concrete type.
2013-11-25 08:53:27 +01:00
Stefanos A.
442f8b6131 Added rewrite postbuild event 2013-11-25 00:58:39 +01:00
Stefanos A.
0f609f6e22 Fixed calling convention for non-Windows platforms 2013-11-25 00:58:09 +01:00
Stefanos A.
e65f206554 Fixed core loading on Windows
On Windows, entry points for OpenGL 1.0 and 1.1 are not exposed by
wglGetProcAddress. We fall back to LoadLibrary+GetProcAddress when
wglProcAddress fails.
2013-11-25 00:26:20 +01:00