Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
3717b8f
wip
gon6109 Oct 28, 2021
9987582
update: LLGI
gon6109 Nov 3, 2021
9948a8c
add: compute shader test
gon6109 Nov 3, 2021
34eb57a
add: fluids simulation test
gon6109 Nov 3, 2021
fb181ac
update: LLGI
gon6109 Nov 3, 2021
cf7aa2a
update: submodule
gon6109 Nov 3, 2021
52cc4e8
update: Core
gon6109 Nov 6, 2021
6208d75
update: Core
gon6109 Feb 15, 2022
c4699c4
Merge remote-tracking branch 'origin/master' into update-llgi
wraikny Jun 3, 2023
d0800e1
update core
wraikny Jun 3, 2023
c1cf5aa
update Buffer
wraikny Jun 3, 2023
caee5b1
update ComputeShader test
wraikny Jun 3, 2023
454f04e
fix Fluid
wraikny Jun 3, 2023
5c31bee
TODO: CommandDrawnNode
wraikny Jun 3, 2023
ccac9b7
update Core
wraikny Jun 11, 2023
baa9ddf
update bindings
wraikny Jun 11, 2023
0e3dcde
delete wrapper methods of removed method
wraikny Jun 11, 2023
ee99734
update IDrawn to have IsDrawn property instead of ICullableDrawn
wraikny Jun 11, 2023
1b6ecd9
add exception to CommandDrawnNode constructor
wraikny Jun 11, 2023
0906f80
update CommandDrawnNode
wraikny Jun 11, 2023
ad36bdd
refine code
wraikny Jun 11, 2023
21f7aea
Merge remote-tracking branch 'origin/master' into update-llgi
wraikny Jun 11, 2023
b455d91
fix code by marging master
wraikny Jun 11, 2023
ef7a825
add methods to shader
wraikny Jun 11, 2023
b85cdf2
update viewer
wraikny Jun 11, 2023
8bdb94c
wip: update Fluid
wraikny Jun 11, 2023
489afd9
fix bug (?) temporarily
wraikny Jun 11, 2023
1da7397
fix code
wraikny Jun 11, 2023
c51b4c3
fix
wraikny Jun 11, 2023
ae5d17a
update shader for mac
wraikny Jun 11, 2023
18851b2
fix for mac
wraikny Jun 11, 2023
a7f0923
refactoring
wraikny Jun 11, 2023
7a62898
add IterationCount property
wraikny Jun 11, 2023
77aa653
refactoring
wraikny Jun 11, 2023
0b77026
コード整理
wraikny Jun 28, 2023
f7471fe
little fix
wraikny Jun 28, 2023
97b5237
add unit test of bitonic sort
wraikny Jun 28, 2023
cf4f4f7
fix test
wraikny Jun 28, 2023
257bb31
update bitonicsort test
wraikny Jun 28, 2023
9e61731
add computetiming test
wraikny Jun 28, 2023
2798984
update test
wraikny Jun 28, 2023
1ddbcaa
update bitonic sort for windows
wraikny Jul 7, 2023
2610716
update test
wraikny Jul 7, 2023
faf4f07
fix iteration count
wraikny Jul 7, 2023
d1d54fa
refactor iteration count
wraikny Jul 7, 2023
00c896c
コード整理
wraikny Jul 7, 2023
f446096
remove comment
wraikny Jul 7, 2023
8ba9e0a
コード整理
wraikny Jul 7, 2023
ddd7707
wip: add assertion??
wraikny Jul 7, 2023
d233422
remove asserting
wraikny Jul 7, 2023
5692b34
update buffer lock
wraikny Jul 7, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 43 additions & 25 deletions Engine/AutoGeneratedCoreBindings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5141,14 +5141,6 @@ public static CommandList TryGetFromCache(IntPtr native)
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_CommandList_ResumeRenderPass(IntPtr selfPtr);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_CommandList_UploadBuffer(IntPtr selfPtr, IntPtr buffer);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_CommandList_ReadbackBuffer(IntPtr selfPtr, IntPtr buffer);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_CommandList_CopyBuffer(IntPtr selfPtr, IntPtr src, IntPtr dst);
Expand Down Expand Up @@ -5177,6 +5169,10 @@ public static CommandList TryGetFromCache(IntPtr native)
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_CommandList_SetIndexBuffer(IntPtr selfPtr, IntPtr ib, int stride, int offset);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_CommandList_SetMaterialWithConstantBuffer(IntPtr selfPtr, IntPtr material, IntPtr constantBuffer);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_CommandList_BeginComputePass(IntPtr selfPtr);
Expand All @@ -5187,7 +5183,11 @@ public static CommandList TryGetFromCache(IntPtr native)

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_CommandList_SetComputeBuffer(IntPtr selfPtr, IntPtr buffer, int stride, int unit);
private static extern void cbg_CommandList_SetComputeBuffer(IntPtr selfPtr, IntPtr buffer, int stride, int unit, int shaderStage);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_CommandList_SetComputePipelineStateWithConstantBuffer(IntPtr selfPtr, IntPtr computePipelineState, IntPtr constantBuffer);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
Expand Down Expand Up @@ -5327,16 +5327,6 @@ public void ResumeRenderPass()
cbg_CommandList_ResumeRenderPass(selfPtr);
}

internal void UploadBuffer(Buffer buffer)
{
cbg_CommandList_UploadBuffer(selfPtr, buffer != null ? buffer.selfPtr : IntPtr.Zero);
}

internal void ReadbackBuffer(Buffer buffer)
{
cbg_CommandList_ReadbackBuffer(selfPtr, buffer != null ? buffer.selfPtr : IntPtr.Zero);
}

internal void CopyBuffer(Buffer src, Buffer dst)
{
cbg_CommandList_CopyBuffer(selfPtr, src != null ? src.selfPtr : IntPtr.Zero, dst != null ? dst.selfPtr : IntPtr.Zero);
Expand Down Expand Up @@ -5386,6 +5376,11 @@ internal void SetIndexBuffer(Buffer ib, int stride, int offset)
cbg_CommandList_SetIndexBuffer(selfPtr, ib != null ? ib.selfPtr : IntPtr.Zero, stride, offset);
}

internal void SetMaterialWithConstantBuffer(Material material, Buffer constantBuffer)
{
cbg_CommandList_SetMaterialWithConstantBuffer(selfPtr, material != null ? material.selfPtr : IntPtr.Zero, constantBuffer != null ? constantBuffer.selfPtr : IntPtr.Zero);
}

public void BeginComputePass()
{
cbg_CommandList_BeginComputePass(selfPtr);
Expand All @@ -5396,9 +5391,14 @@ public void EndComputePass()
cbg_CommandList_EndComputePass(selfPtr);
}

internal void SetComputeBuffer(Buffer buffer, int stride, int unit)
internal void SetComputeBuffer(Buffer buffer, int stride, int unit, ShaderStage shaderStage)
{
cbg_CommandList_SetComputeBuffer(selfPtr, buffer != null ? buffer.selfPtr : IntPtr.Zero, stride, unit);
cbg_CommandList_SetComputeBuffer(selfPtr, buffer != null ? buffer.selfPtr : IntPtr.Zero, stride, unit, (int)shaderStage);
}

internal void SetComputePipelineStateWithConstantBuffer(ComputePipelineState computePipelineState, Buffer constantBuffer)
{
cbg_CommandList_SetComputePipelineStateWithConstantBuffer(selfPtr, computePipelineState != null ? computePipelineState.selfPtr : IntPtr.Zero, constantBuffer != null ? constantBuffer.selfPtr : IntPtr.Zero);
}

public void Dispatch(int x, int y, int z)
Expand Down Expand Up @@ -5512,11 +5512,19 @@ public static Graphics TryGetFromCache(IntPtr native)

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_Graphics_ExecuteCommandList(IntPtr selfPtr);
private static extern void cbg_Graphics_ExecuteCommandList_(IntPtr selfPtr);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_Graphics_ExecuteCommandList_CommandList(IntPtr selfPtr, IntPtr commandList);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_Graphics_WaitFinish(IntPtr selfPtr);
private static extern void cbg_Graphics_WaitFinish_(IntPtr selfPtr);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
private static extern void cbg_Graphics_WaitFinish_CommandList(IntPtr selfPtr, IntPtr commandList);

[DllImport("Altseed2_Core")]
[EditorBrowsable(EditorBrowsableState.Never)]
Expand Down Expand Up @@ -5611,12 +5619,22 @@ public static void Terminate()

public void ExecuteCommandList()
{
cbg_Graphics_ExecuteCommandList(selfPtr);
cbg_Graphics_ExecuteCommandList_(selfPtr);
}

public void ExecuteCommandList(CommandList commandList)
{
cbg_Graphics_ExecuteCommandList_CommandList(selfPtr, commandList != null ? commandList.selfPtr : IntPtr.Zero);
}

public void WaitFinish()
{
cbg_Graphics_WaitFinish(selfPtr);
cbg_Graphics_WaitFinish_(selfPtr);
}

public void WaitFinish(CommandList commandList)
{
cbg_Graphics_WaitFinish_CommandList(selfPtr, commandList != null ? commandList.selfPtr : IntPtr.Zero);
}

/// <summary>
Expand Down
208 changes: 208 additions & 0 deletions Engine/CorePartial/Buffer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

namespace Altseed2
{
/// <summary>
/// CPU/GPUバッファ
/// </summary>
/// <typeparam name="T"></typeparam>
public class Buffer<T> where T : struct
{
internal Buffer InternalBuffer { get; }

/// <summary>
/// バッファ内の要素数
/// </summary>
public int Count { get; }

/// <summary>
/// バッファのサイズ
/// </summary>
public int Size => InternalBuffer.Size;

/// <summary>
/// バッファの使途
/// </summary>
public BufferUsageType BufferUsage => InternalBuffer.BufferUsage;

Buffer(Buffer internalBuffer, int count)
{
InternalBuffer = internalBuffer;
Count = count;
}

/// <summary>
/// バッファを生成します
/// </summary>
/// <param name="usage">バッファの使途</param>
/// <param name="count">要素数</param>
/// <returns><see cref="Buffer{T}"/>のインスタンス</returns>
public static Buffer<T> Create(BufferUsageType usage, int count)
{
var internalBuffer = Buffer.Create(usage, Marshal.SizeOf<T>() * count);
if (internalBuffer is null)
{
Engine.Log.Error(LogCategory.Engine, "Buffer<T>::Create: bufferの作成に失敗しました。");
return null;
}

return new Buffer<T>(internalBuffer, count);
}

/// <summary>
/// バッファを生成します
/// </summary>
/// <param name="usage">バッファの使途</param>
/// <param name="count">要素数</param>
/// <returns><see cref="Buffer{T}"/>のインスタンス</returns>
/// <exceptions><see cref="ArgumentException"/>バッファの作成に失敗</exceptions>
public static Buffer<T> CreateStrict(BufferUsageType usage, int count)
{
var internalBuffer = Buffer.Create(usage, Marshal.SizeOf<T>() * count);
if (internalBuffer is null)
{
throw new ArgumentException("Bufferの作成に失敗しました。");
}

return new Buffer<T>(internalBuffer, count);
}

/// <summary>
/// バッファのデータへアクセスする
/// </summary>
/// <returns>バッファのデータ<see cref="ReadOnlySpan{T}"/>を持つ<see cref="ReadContainer"/></returns>
public ReadContainer ReadLock()
{
unsafe
{
var lockPtr = InternalBuffer.Lock();

if (lockPtr == IntPtr.Zero
|| ((InternalBuffer.BufferUsage & BufferUsageType.MapRead) == 0
&& (InternalBuffer.BufferUsage & BufferUsageType.MapWrite) == 0)
)
{
return new ReadContainer(null, null);
}
return new ReadContainer(this, new ReadOnlySpan<T>(lockPtr.ToPointer(), Count));
}
}

/// <summary>
/// バッファのデータへアクセスする。
/// </summary>
/// <returns>バッファのデータ<see cref="Span{T}"/>を持つ<see cref="ReadContainer"/></returns>
/// <exception cref="InvalidOperationException">バッファのロックに失敗</exception>
public ReadContainer ReadLockStrict()
{
var container = ReadLock();

if (container.Span == null)
{
throw new InvalidOperationException("バッファのロックに失敗しました。");
}

return container;
}

/// <summary>
/// バッファのデータへアクセスする
/// </summary>
/// <returns>バッファのデータ<see cref="Span{T}"/>を持つ<see cref="WriteContainer"/></returns>
public WriteContainer WriteLock()
{
unsafe
{
var lockPtr = InternalBuffer.Lock();

if (lockPtr == IntPtr.Zero || ((InternalBuffer.BufferUsage & BufferUsageType.MapWrite) == 0))
{
return new WriteContainer(null, null);
}
return new WriteContainer(this, new Span<T>(lockPtr.ToPointer(), Count));
}
}

/// <summary>
/// バッファのデータへアクセスする。
/// </summary>
/// <returns>バッファのデータ<see cref="Span{T}"/>を持つ<see cref="WriteContainer"/></returns>
/// <exception cref="InvalidOperationException">バッファのロックに失敗</exception>
public WriteContainer WriteLockStrict()
{
var container = WriteLock();

if (container.Span == null)
{
throw new InvalidOperationException("バッファのロックに失敗しました。");
}

return container;
}

/// <summary>
/// バッファへ書き込みを行うための情報を保持する構造体。
/// </summary>
/// <returns></returns>
public ref struct ReadContainer
{
private readonly Buffer<T> buffer;

/// <summary>
/// バッファのデータ
/// </summary>
/// <returns></returns>
public ReadOnlySpan<T> Span { get; private init; }

/// <summary>
/// <see cref="Span{T}"/>がnullではない。
/// </summary>
public bool IsValid => Span != null;

internal ReadContainer(Buffer<T> buffer, ReadOnlySpan<T> span)
{
this.buffer = buffer;
Span = span;
}

/// <summary>
/// バッファのアンロックを行う
/// </summary>
public void Dispose() => buffer?.InternalBuffer.Unlock();
}

/// <summary>
/// バッファへ書き込みを行うための情報を保持する構造体。
/// </summary>
/// <returns></returns>
public ref struct WriteContainer
{
private readonly Buffer<T> buffer;

/// <summary>
/// バッファのデータ
/// </summary>
/// <returns></returns>
public Span<T> Span { get; private init; }

/// <summary>
/// <see cref="Span{T}"/>がnullではない。
/// </summary>
public bool IsValid => Span != null;

internal WriteContainer(Buffer<T> buffer, Span<T> span)
{
this.buffer = buffer;
Span = span;
}

/// <summary>
/// バッファのアンロックを行う
/// </summary>
public void Dispose() => buffer?.InternalBuffer.Unlock();
}
}
}
Loading