Browse Source

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

pull/1331/head
Jeremy Koritzinsky 9 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 Avalonia.XBuild.sln
project.lock.json project.lock.json
.idea/* .idea/*
**/obj-Skia/*
**/obj-Direct2D1/*

14
build.cake

@ -124,14 +124,9 @@ Task("Restore-NuGet-Packages")
void DotNetCoreBuild() void DotNetCoreBuild()
{ {
DotNetCoreRestore("samples\\ControlCatalog.NetCore"); DotNetCoreBuild("samples\\ControlCatalog.NetCore");
DotNetBuild("samples\\ControlCatalog.NetCore");
} }
Task("DotNetCoreBuild")
.IsDependentOn("Clean")
.Does(() => DotNetCoreBuild());
Task("Build") Task("Build")
.IsDependentOn("Restore-NuGet-Packages") .IsDependentOn("Restore-NuGet-Packages")
.Does(() => .Does(() =>
@ -140,9 +135,9 @@ Task("Build")
{ {
MSBuild(parameters.MSBuildSolution, settings => { MSBuild(parameters.MSBuildSolution, settings => {
settings.SetConfiguration(parameters.Configuration); settings.SetConfiguration(parameters.Configuration);
settings.SetVerbosity(Verbosity.Minimal);
settings.WithProperty("Platform", "\"" + parameters.Platform + "\""); settings.WithProperty("Platform", "\"" + parameters.Platform + "\"");
settings.WithProperty("UseRoslynPathHack", "true"); settings.WithProperty("UseRoslynPathHack", "true");
settings.SetVerbosity(Verbosity.Minimal);
settings.UseToolVersion(MSBuildToolVersion.VS2017); settings.UseToolVersion(MSBuildToolVersion.VS2017);
settings.WithProperty("Windows", "True"); settings.WithProperty("Windows", "True");
settings.SetNodeReuse(false); settings.SetNodeReuse(false);
@ -160,7 +155,6 @@ void RunCoreTest(string project, Parameters parameters, bool coreOnly = false)
if(!project.EndsWith(".csproj")) if(!project.EndsWith(".csproj"))
project = System.IO.Path.Combine(project, System.IO.Path.GetFileName(project)+".csproj"); project = System.IO.Path.Combine(project, System.IO.Path.GetFileName(project)+".csproj");
Information("Running tests from " + project); Information("Running tests from " + project);
DotNetCoreRestore(project);
var frameworks = new List<string>(){"netcoreapp2.0"}; var frameworks = new List<string>(){"netcoreapp2.0"};
if(parameters.IsRunningOnWindows) if(parameters.IsRunningOnWindows)
frameworks.Add("net47"); frameworks.Add("net47");
@ -215,7 +209,7 @@ Task("Run-Designer-Unit-Tests")
var toolPath = (parameters.IsPlatformAnyCPU || parameters.IsPlatformX86) ? var toolPath = (parameters.IsPlatformAnyCPU || parameters.IsPlatformX86) ?
Context.Tools.Resolve("xunit.console.x86.exe") : Context.Tools.Resolve("xunit.console.x86.exe") :
Context.Tools.Resolve("xunit.console.exe"); Context.Tools.Resolve("xunit.console.exe");
var xUnitSettings = new XUnit2Settings var xUnitSettings = new XUnit2Settings
{ {
ToolPath = toolPath, ToolPath = toolPath,
@ -223,7 +217,7 @@ Task("Run-Designer-Unit-Tests")
ShadowCopy = false, ShadowCopy = false,
}; };
XUnit2(GetFiles("./artifacts/designer-tests/Avalonia.DesignerSupport.Tests.csproj"), xUnitSettings); XUnit2("./artifacts/designer-tests/Avalonia.DesignerSupport.Tests.dll", xUnitSettings);
}); });
Task("Copy-Files") 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 SharpDXDirect3D11Version = packageVersions["SharpDX.Direct3D11"].FirstOrDefault().Item1;
var SharpDXDirect3D9Version = packageVersions["SharpDX.Direct3D9"].FirstOrDefault().Item1; var SharpDXDirect3D9Version = packageVersions["SharpDX.Direct3D9"].FirstOrDefault().Item1;
var SharpDXDXGIVersion = packageVersions["SharpDX.DXGI"].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: Serilog, version: {0}", SerilogVersion);
context.Information("Package: Sprache, version: {0}", SpracheVersion); context.Information("Package: Sprache, version: {0}", SpracheVersion);
@ -394,7 +395,8 @@ public class Packages
new NuSpecDependency() { Id = "SharpDX", Version = SharpDXVersion }, new NuSpecDependency() { Id = "SharpDX", Version = SharpDXVersion },
new NuSpecDependency() { Id = "SharpDX.Direct2D1", Version = SharpDXDirect2D1Version }, new NuSpecDependency() { Id = "SharpDX.Direct2D1", Version = SharpDXDirect2D1Version },
new NuSpecDependency() { Id = "SharpDX.Direct3D11", Version = SharpDXDirect3D11Version }, 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 [] Files = new []
{ {

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

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

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

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

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

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

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

@ -3,6 +3,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Runtime.CompilerServices;
using Avalonia.Win32.Interop; using Avalonia.Win32.Interop;
using SharpDX.WIC; using SharpDX.WIC;
using APixelFormat = Avalonia.Platform.PixelFormat; using APixelFormat = Avalonia.Platform.PixelFormat;
@ -74,8 +75,13 @@ namespace Avalonia.Direct2D1.Media
{ {
for (var row = 0; row < height; row++) for (var row = 0; row < height; row++)
{ {
UnmanagedMethods.CopyMemory(new IntPtr(l.Data.DataPointer.ToInt64() + row * l.Stride), unsafe
new IntPtr(data.ToInt64() + row * stride), (uint) l.Data.Pitch); {
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 dwMaximumSizeHigh,
uint dwMaximumSizeLow, uint dwMaximumSizeLow,
string lpName); string lpName);
[DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);
public enum MONITOR public enum MONITOR
{ {
MONITOR_DEFAULTTONULL = 0x00000000, MONITOR_DEFAULTTONULL = 0x00000000,

7
tests/Avalonia.RenderTests/TestBase.cs

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

Loading…
Cancel
Save