Browse Source

Fix x64 builds of Avaloina.Direct2D1. Refactor build scripts to reduce time and fix issues.

pull/1331/head
Jeremy Koritzinsky 8 years ago
parent
commit
1c12cd4bd6
  1. 2
      .gitignore
  2. 14
      build.cake
  3. 5
      build/Unsafe.props
  4. 4
      packages.cake
  5. 7
      src/Android/Avalonia.Android/Resources/Resource.Designer.cs
  6. 2
      src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj
  7. 12
      src/Windows/Avalonia.Direct2D1/FramebufferShimRenderTarget.cs
  8. 10
      src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs
  9. 5
      src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs
  10. 7
      tests/Avalonia.RenderTests/TestBase.cs

2
.gitignore

@ -176,3 +176,5 @@ nuget
Avalonia.XBuild.sln
project.lock.json
.idea/*
**/obj-Skia/*
**/obj-Direct2D1/*

14
build.cake

@ -124,14 +124,9 @@ Task("Restore-NuGet-Packages")
void DotNetCoreBuild()
{
DotNetCoreRestore("samples\\ControlCatalog.NetCore");
DotNetBuild("samples\\ControlCatalog.NetCore");
DotNetCoreBuild("samples\\ControlCatalog.NetCore");
}
Task("DotNetCoreBuild")
.IsDependentOn("Clean")
.Does(() => DotNetCoreBuild());
Task("Build")
.IsDependentOn("Restore-NuGet-Packages")
.Does(() =>
@ -140,9 +135,9 @@ Task("Build")
{
MSBuild(parameters.MSBuildSolution, settings => {
settings.SetConfiguration(parameters.Configuration);
settings.SetVerbosity(Verbosity.Minimal);
settings.WithProperty("Platform", "\"" + parameters.Platform + "\"");
settings.WithProperty("UseRoslynPathHack", "true");
settings.SetVerbosity(Verbosity.Minimal);
settings.UseToolVersion(MSBuildToolVersion.VS2017);
settings.WithProperty("Windows", "True");
settings.SetNodeReuse(false);
@ -160,7 +155,6 @@ void RunCoreTest(string project, Parameters parameters, bool coreOnly = false)
if(!project.EndsWith(".csproj"))
project = System.IO.Path.Combine(project, System.IO.Path.GetFileName(project)+".csproj");
Information("Running tests from " + project);
DotNetCoreRestore(project);
var frameworks = new List<string>(){"netcoreapp2.0"};
if(parameters.IsRunningOnWindows)
frameworks.Add("net47");
@ -215,7 +209,7 @@ Task("Run-Designer-Unit-Tests")
var toolPath = (parameters.IsPlatformAnyCPU || parameters.IsPlatformX86) ?
Context.Tools.Resolve("xunit.console.x86.exe") :
Context.Tools.Resolve("xunit.console.exe");
var xUnitSettings = new XUnit2Settings
{
ToolPath = toolPath,
@ -223,7 +217,7 @@ Task("Run-Designer-Unit-Tests")
ShadowCopy = false,
};
XUnit2(GetFiles("./artifacts/designer-tests/Avalonia.DesignerSupport.Tests.csproj"), xUnitSettings);
XUnit2("./artifacts/designer-tests/Avalonia.DesignerSupport.Tests.dll", xUnitSettings);
});
Task("Copy-Files")

5
build/Unsafe.props

@ -0,0 +1,5 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="4.4.0" />
</ItemGroup>
</Project>

4
packages.cake

@ -120,6 +120,7 @@ public class Packages
var SharpDXDirect3D11Version = packageVersions["SharpDX.Direct3D11"].FirstOrDefault().Item1;
var SharpDXDirect3D9Version = packageVersions["SharpDX.Direct3D9"].FirstOrDefault().Item1;
var SharpDXDXGIVersion = packageVersions["SharpDX.DXGI"].FirstOrDefault().Item1;
var UnsafeVersion = packageVersions["System.Runtime.CompilerServices.Unsafe"].FirstOrDefault().Item1;
context.Information("Package: Serilog, version: {0}", SerilogVersion);
context.Information("Package: Sprache, version: {0}", SpracheVersion);
@ -394,7 +395,8 @@ public class Packages
new NuSpecDependency() { Id = "SharpDX", Version = SharpDXVersion },
new NuSpecDependency() { Id = "SharpDX.Direct2D1", Version = SharpDXDirect2D1Version },
new NuSpecDependency() { Id = "SharpDX.Direct3D11", Version = SharpDXDirect3D11Version },
new NuSpecDependency() { Id = "SharpDX.DXGI", Version = SharpDXDXGIVersion }
new NuSpecDependency() { Id = "SharpDX.DXGI", Version = SharpDXDXGIVersion },
new NuSpecDependency() { Id = "System.Runtime.CompilerServices.Unsafe", Version = UnsafeVersion }
},
Files = new []
{

7
src/Android/Avalonia.Android/Resources/Resource.Designer.cs

@ -40,11 +40,14 @@ namespace Avalonia.Android
public partial class String
{
// aapt resource value: 0x7f020002
public static int ApplicationName = 2130837506;
// aapt resource value: 0x7f020001
public static int ApplicationName = 2130837505;
public static int Hello = 2130837505;
// aapt resource value: 0x7f020000
public static int Hello = 2130837504;
public static int library_name = 2130837504;
static String()
{

2
src/Windows/Avalonia.Direct2D1/Avalonia.Direct2D1.csproj

@ -2,6 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\..\Shared\SharedAssemblyInfo.cs">
@ -25,4 +26,5 @@
<Import Project="..\..\..\build\SharpDX.props" />
<Import Project="..\..\Shared\RenderHelpers\RenderHelpers.projitems" Label="Shared" />
<Import Project="..\..\..\build\JetBrains.Annotations.props" />
<Import Project="..\..\..\build\Unsafe.props" />
</Project>

12
src/Windows/Avalonia.Direct2D1/FramebufferShimRenderTarget.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using Avalonia.Controls.Platform.Surfaces;
using Avalonia.Direct2D1.Media;
@ -67,10 +68,13 @@ namespace Avalonia.Direct2D1
{
for (var y = 0; y < _target.Height; y++)
{
UnmanagedMethods.CopyMemory(
_target.Address + _target.RowBytes * y,
l.Data.DataPointer + l.Stride * y,
(uint) Math.Min(l.Stride, _target.RowBytes));
unsafe
{
Unsafe.CopyBlock(
(void*)(_target.Address + _target.RowBytes * y),
(void*)(l.Data.DataPointer + l.Stride * y),
(uint)Math.Min(l.Stride, _target.RowBytes));
}
}
}
Dispose();

10
src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs

@ -3,6 +3,7 @@
using System;
using System.IO;
using System.Runtime.CompilerServices;
using Avalonia.Win32.Interop;
using SharpDX.WIC;
using APixelFormat = Avalonia.Platform.PixelFormat;
@ -74,8 +75,13 @@ namespace Avalonia.Direct2D1.Media
{
for (var row = 0; row < height; row++)
{
UnmanagedMethods.CopyMemory(new IntPtr(l.Data.DataPointer.ToInt64() + row * l.Stride),
new IntPtr(data.ToInt64() + row * stride), (uint) l.Data.Pitch);
unsafe
{
Unsafe.CopyBlock(
(void*)(l.Data.DataPointer + row * l.Stride),
(void*)(data + row * stride),
(uint) l.Data.Pitch);
}
}
}
}

5
src/Windows/Avalonia.Win32/Interop/UnmanagedMethods.cs

@ -947,10 +947,7 @@ namespace Avalonia.Win32.Interop
uint dwMaximumSizeHigh,
uint dwMaximumSizeLow,
string lpName);
[DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);
public enum MONITOR
{
MONITOR_DEFAULTTONULL = 0x00000000,

7
tests/Avalonia.RenderTests/TestBase.cs

@ -46,12 +46,13 @@ namespace Avalonia.Direct2D1.RenderTests
public TestBase(string outputPath)
{
var testFiles = Path.GetFullPath(@"..\..\..\..\..\TestFiles\");
#if AVALONIA_SKIA
string testFiles = Path.GetFullPath(@"..\..\..\..\..\TestFiles\Skia");
var platform = "Skia";
#else
string testFiles = Path.GetFullPath(@"..\..\tests\TestFiles\Direct2D1");
var platform = "Direct2D1";
#endif
OutputPath = Path.Combine(testFiles, outputPath);
OutputPath = Path.Combine(testFiles, platform, outputPath);
threadingInterface.MainThread = Thread.CurrentThread;
}

Loading…
Cancel
Save