[metalperformanceshaders] Fix MPSImageLanczosScale base class change (#3170)
Sadly this creates a breaking change since the `ScaleTransform` property was re-introduced with an incorrect signature in the new base class `MPSImageScale` Unless someone has an idea how to avoid it (I don't see an option) then we'll have to document it in the 15.7 release notes. Also add missing _SetScaleTransform call and related unit tests
This commit is contained in:
Родитель
4b667e4700
Коммит
f9ceb5c39d
|
@ -9,7 +9,7 @@ using XamCore.ObjCRuntime;
|
||||||
|
|
||||||
namespace XamCore.MetalPerformanceShaders {
|
namespace XamCore.MetalPerformanceShaders {
|
||||||
|
|
||||||
public partial class MPSImageLanczosScale {
|
public partial class MPSImageScale {
|
||||||
static int size_of_scale_transform = Marshal.SizeOf (typeof(MPSScaleTransform));
|
static int size_of_scale_transform = Marshal.SizeOf (typeof(MPSScaleTransform));
|
||||||
|
|
||||||
public virtual MPSScaleTransform? ScaleTransform {
|
public virtual MPSScaleTransform? ScaleTransform {
|
||||||
|
@ -24,6 +24,7 @@ namespace XamCore.MetalPerformanceShaders {
|
||||||
IntPtr ptr = Marshal.AllocHGlobal (size_of_scale_transform);
|
IntPtr ptr = Marshal.AllocHGlobal (size_of_scale_transform);
|
||||||
try {
|
try {
|
||||||
Marshal.StructureToPtr<MPSScaleTransform> (value.Value, ptr, false);
|
Marshal.StructureToPtr<MPSScaleTransform> (value.Value, ptr, false);
|
||||||
|
_SetScaleTransform (ptr);
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
Marshal.FreeHGlobal (ptr);
|
Marshal.FreeHGlobal (ptr);
|
|
@ -1008,7 +1008,7 @@ METALPERFORMANCESHADERS_CORE_SOURCES = \
|
||||||
MetalPerformanceShaders/MPSKernel.cs \
|
MetalPerformanceShaders/MPSKernel.cs \
|
||||||
|
|
||||||
METALPERFORMANCESHADERS_SOURCES = \
|
METALPERFORMANCESHADERS_SOURCES = \
|
||||||
MetalPerformanceShaders/MPSImageLanczosScale.cs \
|
MetalPerformanceShaders/MPSImageScale.cs \
|
||||||
MetalPerformanceShaders/MPSCnnConvolutionDescriptor.cs \
|
MetalPerformanceShaders/MPSCnnConvolutionDescriptor.cs \
|
||||||
MetalPerformanceShaders/MPSCnnNeuron.cs \
|
MetalPerformanceShaders/MPSCnnNeuron.cs \
|
||||||
MetalPerformanceShaders/MPSCnnKernel.cs \
|
MetalPerformanceShaders/MPSCnnKernel.cs \
|
||||||
|
|
|
@ -499,20 +499,9 @@ namespace XamCore.MetalPerformanceShaders {
|
||||||
// MPSImageResampling.h
|
// MPSImageResampling.h
|
||||||
|
|
||||||
[iOS (9,0)][Mac (10, 13, onlyOn64: true)]
|
[iOS (9,0)][Mac (10, 13, onlyOn64: true)]
|
||||||
[BaseType (typeof (MPSUnaryImageKernel))]
|
[BaseType (typeof (MPSImageScale))]
|
||||||
[DisableDefaultCtor]
|
[DisableDefaultCtor]
|
||||||
interface MPSImageLanczosScale {
|
interface MPSImageLanczosScale {
|
||||||
// scaleTransform property should be like:
|
|
||||||
// unsafe MPSScaleTransform* ScaleTransform { get; set; }
|
|
||||||
// which is both ugly and not supported by the generator
|
|
||||||
[Export ("scaleTransform")]
|
|
||||||
[Internal]
|
|
||||||
IntPtr _GetScaleTransform ();
|
|
||||||
|
|
||||||
[Export ("setScaleTransform:")]
|
|
||||||
[Internal]
|
|
||||||
void _SetScaleTransform (IntPtr value);
|
|
||||||
|
|
||||||
// inlining .ctor from base class
|
// inlining .ctor from base class
|
||||||
|
|
||||||
[Export ("initWithDevice:")]
|
[Export ("initWithDevice:")]
|
||||||
|
@ -1979,8 +1968,16 @@ namespace XamCore.MetalPerformanceShaders {
|
||||||
[DesignatedInitializer]
|
[DesignatedInitializer]
|
||||||
IntPtr Constructor (IMTLDevice device);
|
IntPtr Constructor (IMTLDevice device);
|
||||||
|
|
||||||
[NullAllowed, Export ("scaleTransform", ArgumentSemantic.Assign)]
|
// scaleTransform property should be like:
|
||||||
MPSScaleTransform ScaleTransform { get; set; }
|
// unsafe MPSScaleTransform* ScaleTransform { get; set; }
|
||||||
|
// which is both ugly and not supported by the generator
|
||||||
|
[Export ("scaleTransform")]
|
||||||
|
[Internal]
|
||||||
|
IntPtr _GetScaleTransform ();
|
||||||
|
|
||||||
|
[Export ("setScaleTransform:")]
|
||||||
|
[Internal]
|
||||||
|
void _SetScaleTransform (IntPtr value);
|
||||||
|
|
||||||
[Export ("initWithCoder:device:")]
|
[Export ("initWithCoder:device:")]
|
||||||
[DesignatedInitializer]
|
[DesignatedInitializer]
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
#if !__WATCHOS__
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Foundation;
|
||||||
|
|
||||||
|
#if XAMCORE_2_0
|
||||||
|
using Metal;
|
||||||
|
using MetalPerformanceShaders;
|
||||||
|
#else
|
||||||
|
using MonoTouch.Metal;
|
||||||
|
using MonoTouch.MetalPerformanceShaders;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace MonoTouchFixtures.MetalPerformanceShaders {
|
||||||
|
|
||||||
|
[TestFixture]
|
||||||
|
public class ImageScaleTest {
|
||||||
|
|
||||||
|
IMTLDevice device;
|
||||||
|
|
||||||
|
[TestFixtureSetUp]
|
||||||
|
public void Metal ()
|
||||||
|
{
|
||||||
|
TestRuntime.AssertXcodeVersion (9,0);
|
||||||
|
|
||||||
|
device = MTLDevice.SystemDefault;
|
||||||
|
// some older hardware won't have a default
|
||||||
|
if (device == null)
|
||||||
|
Assert.Inconclusive ("Metal is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ScaleTransform ()
|
||||||
|
{
|
||||||
|
var st = new MPSScaleTransform () {
|
||||||
|
ScaleX = 1,
|
||||||
|
ScaleY = 2,
|
||||||
|
TranslateX = 3,
|
||||||
|
TranslateY = 4,
|
||||||
|
};
|
||||||
|
using (var scale = new MPSImageScale (device)) {
|
||||||
|
scale.ScaleTransform = st;
|
||||||
|
// roundtrip with our (non generated) code
|
||||||
|
var rt = scale.ScaleTransform.Value;
|
||||||
|
Assert.That (rt.ScaleX, Is.EqualTo (st.ScaleX), "ScaleX");
|
||||||
|
Assert.That (rt.ScaleY, Is.EqualTo (st.ScaleY), "ScaleY");
|
||||||
|
Assert.That (rt.TranslateX, Is.EqualTo (st.TranslateX), "TranslateX");
|
||||||
|
Assert.That (rt.TranslateY, Is.EqualTo (st.TranslateY), "TranslateY");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -1 +0,0 @@
|
||||||
!wrong-base-type! MPSImageLanczosScale expected MPSImageScale actual MPSUnaryImageKernel
|
|
|
@ -1 +0,0 @@
|
||||||
!wrong-base-type! MPSImageLanczosScale expected MPSImageScale actual MPSUnaryImageKernel
|
|
|
@ -1 +0,0 @@
|
||||||
!wrong-base-type! MPSImageLanczosScale expected MPSImageScale actual MPSUnaryImageKernel
|
|
Загрузка…
Ссылка в новой задаче