[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:
Sebastien Pouliot 2018-01-09 12:03:18 -05:00 коммит произвёл GitHub
Родитель 4b667e4700
Коммит f9ceb5c39d
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
7 изменённых файлов: 70 добавлений и 19 удалений

Просмотреть файл

@ -9,7 +9,7 @@ using XamCore.ObjCRuntime;
namespace XamCore.MetalPerformanceShaders {
public partial class MPSImageLanczosScale {
public partial class MPSImageScale {
static int size_of_scale_transform = Marshal.SizeOf (typeof(MPSScaleTransform));
public virtual MPSScaleTransform? ScaleTransform {
@ -24,6 +24,7 @@ namespace XamCore.MetalPerformanceShaders {
IntPtr ptr = Marshal.AllocHGlobal (size_of_scale_transform);
try {
Marshal.StructureToPtr<MPSScaleTransform> (value.Value, ptr, false);
_SetScaleTransform (ptr);
}
finally {
Marshal.FreeHGlobal (ptr);

Просмотреть файл

@ -1008,7 +1008,7 @@ METALPERFORMANCESHADERS_CORE_SOURCES = \
MetalPerformanceShaders/MPSKernel.cs \
METALPERFORMANCESHADERS_SOURCES = \
MetalPerformanceShaders/MPSImageLanczosScale.cs \
MetalPerformanceShaders/MPSImageScale.cs \
MetalPerformanceShaders/MPSCnnConvolutionDescriptor.cs \
MetalPerformanceShaders/MPSCnnNeuron.cs \
MetalPerformanceShaders/MPSCnnKernel.cs \

Просмотреть файл

@ -499,20 +499,9 @@ namespace XamCore.MetalPerformanceShaders {
// MPSImageResampling.h
[iOS (9,0)][Mac (10, 13, onlyOn64: true)]
[BaseType (typeof (MPSUnaryImageKernel))]
[BaseType (typeof (MPSImageScale))]
[DisableDefaultCtor]
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
[Export ("initWithDevice:")]
@ -1979,8 +1968,16 @@ namespace XamCore.MetalPerformanceShaders {
[DesignatedInitializer]
IntPtr Constructor (IMTLDevice device);
[NullAllowed, Export ("scaleTransform", ArgumentSemantic.Assign)]
MPSScaleTransform ScaleTransform { get; set; }
// 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);
[Export ("initWithCoder:device:")]
[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