Skip to content

Commit

Permalink
Merge branch 'develop/reflesh'
Browse files Browse the repository at this point in the history
  • Loading branch information
kodai100 committed Mar 31, 2018
2 parents bc3b3f4 + 1a9319c commit fd29f13
Show file tree
Hide file tree
Showing 97 changed files with 1,800 additions and 38 deletions.
46 changes: 37 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,23 +1,51 @@
[Ll]ibrary/
[Tt]emp/
[Oo]bj/
[Bb]uild/
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/Assets/AssetStoreTools*

UnityVS/
UnityVS.meta
UnityVS.Aries.sln.DotSettings
# Visual Studio 2015 cache directory
/.vs/

# Autogenerated VS/MD solution and project files
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.pdb

#Unity3D Generated File On Crash Reports
# Unity3D generated meta files
*.pidb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt
<<<<<<< HEAD
*.db
*.opendb
=======

# Builds
*.apk
*.unitypackage

#Mac
*.DS_Store

# Unity3D Generated File On Crash Reports
sysinfo.txt

# vim
*~
*.swp

#UnityVS
Assets/Packages/UnityVS*
>>>>>>> develop/reflesh
1 change: 1 addition & 0 deletions Assets/Packages.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions Assets/Packages.meta~HEAD
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: fbcea5ef9f155a043b513572b8bf17b9
folderAsset: yes
timeCreated: 1502163960
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
9 changes: 9 additions & 0 deletions Assets/Packages.meta~HEAD.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Assets/Packages.meta~develop_reflesh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: fbcea5ef9f155a043b513572b8bf17b9
folderAsset: yes
timeCreated: 1502163960
licenseType: Pro
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
9 changes: 9 additions & 0 deletions Assets/Packages.meta~develop_reflesh.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Assets/Packages/BitonicSort.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

77 changes: 77 additions & 0 deletions Assets/Packages/BitonicSort/BitonicSort.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
using UnityEngine;

namespace Sorting.BitonicSort
{

public class BitonicSort
{

protected static readonly uint BITONIC_BLOCK_SIZE = 512;
protected static readonly uint TRANSPOSE_BLOCK_SIZE = 16;

protected ComputeShader BitonicCS;

int numElements;

public BitonicSort(int numElements)
{
this.BitonicCS = (ComputeShader)Resources.Load("BitonicSortCS");
this.numElements = numElements;
}

public void Sort(ref ComputeBuffer inBuffer, ref ComputeBuffer tempBuffer)
{
ComputeShader sortCS = BitonicCS;

int KERNEL_ID_BITONICSORT = sortCS.FindKernel("BitonicSort");
int KERNEL_ID_TRANSPOSE = sortCS.FindKernel("MatrixTranspose");

uint NUM_ELEMENTS = (uint)numElements;
uint MATRIX_WIDTH = BITONIC_BLOCK_SIZE;
uint MATRIX_HEIGHT = (uint)NUM_ELEMENTS / BITONIC_BLOCK_SIZE;

for (uint level = 2; level <= BITONIC_BLOCK_SIZE; level <<= 1)
{
SetGPUSortConstants(sortCS, level, level, MATRIX_HEIGHT, MATRIX_WIDTH);

// Sort the row data
sortCS.SetBuffer(KERNEL_ID_BITONICSORT, "Data", inBuffer);
sortCS.Dispatch(KERNEL_ID_BITONICSORT, (int)(NUM_ELEMENTS / BITONIC_BLOCK_SIZE), 1, 1);
}

// Then sort the rows and columns for the levels > than the block size
// Transpose. Sort the Columns. Transpose. Sort the Rows.
for (uint level = (BITONIC_BLOCK_SIZE << 1); level <= NUM_ELEMENTS; level <<= 1)
{
// Transpose the data from buffer 1 into buffer 2
SetGPUSortConstants(sortCS, level / BITONIC_BLOCK_SIZE, (level & ~NUM_ELEMENTS) / BITONIC_BLOCK_SIZE, MATRIX_WIDTH, MATRIX_HEIGHT);
sortCS.SetBuffer(KERNEL_ID_TRANSPOSE, "Input", inBuffer);
sortCS.SetBuffer(KERNEL_ID_TRANSPOSE, "Data", tempBuffer);
sortCS.Dispatch(KERNEL_ID_TRANSPOSE, (int)(MATRIX_WIDTH / TRANSPOSE_BLOCK_SIZE), (int)(MATRIX_HEIGHT / TRANSPOSE_BLOCK_SIZE), 1);

// Sort the transposed column data
sortCS.SetBuffer(KERNEL_ID_BITONICSORT, "Data", tempBuffer);
sortCS.Dispatch(KERNEL_ID_BITONICSORT, (int)(NUM_ELEMENTS / BITONIC_BLOCK_SIZE), 1, 1);

// Transpose the data from buffer 2 back into buffer 1
SetGPUSortConstants(sortCS, BITONIC_BLOCK_SIZE, level, MATRIX_HEIGHT, MATRIX_WIDTH);
sortCS.SetBuffer(KERNEL_ID_TRANSPOSE, "Input", tempBuffer);
sortCS.SetBuffer(KERNEL_ID_TRANSPOSE, "Data", inBuffer);
sortCS.Dispatch(KERNEL_ID_TRANSPOSE, (int)(MATRIX_HEIGHT / TRANSPOSE_BLOCK_SIZE), (int)(MATRIX_WIDTH / TRANSPOSE_BLOCK_SIZE), 1);

// Sort the row data
sortCS.SetBuffer(KERNEL_ID_BITONICSORT, "Data", inBuffer);
sortCS.Dispatch(KERNEL_ID_BITONICSORT, (int)(NUM_ELEMENTS / BITONIC_BLOCK_SIZE), 1, 1);
}
}

void SetGPUSortConstants(ComputeShader cs, uint level, uint levelMask, uint width, uint height)
{
cs.SetInt("_Level", (int)level);
cs.SetInt("_LevelMask", (int)levelMask);
cs.SetInt("_Width", (int)width);
cs.SetInt("_Height", (int)height);
}

}
}
13 changes: 13 additions & 0 deletions Assets/Packages/BitonicSort/BitonicSort.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Assets/Packages/BitonicSort/Resources.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

52 changes: 52 additions & 0 deletions Assets/Packages/BitonicSort/Resources/BitonicSortCS.compute
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#pragma kernel BitonicSort
#pragma kernel MatrixTranspose

#define BITONIC_BLOCK_SIZE 512
#define TRANSPOSE_BLOCK_SIZE 16

cbuffer cb
{
uint _Level;
uint _LevelMask;
uint _Width;
uint _Height;
};

StructuredBuffer <uint2> Input : register(t0);
RWStructuredBuffer<uint2> Data : register(u0);

groupshared uint2 shared_data[BITONIC_BLOCK_SIZE];

bool Compare(uint2 left, uint2 right) {
return (left.x == right.x) ? (left.y <= right.y) : (left.x <= right.x);
// return left.x <= right.x;
}

[numthreads(BITONIC_BLOCK_SIZE, 1, 1)]
void BitonicSort(uint3 Gid : SV_GroupID, uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID, uint GI : SV_GroupIndex) {
// Load shared data
shared_data[GI] = Data[DTid.x];
GroupMemoryBarrierWithGroupSync();

// Sort the shared data
for (uint j = _Level >> 1; j > 0; j >>= 1) {
uint2 result = (Compare(shared_data[GI & ~j], shared_data[GI | j]) == (bool)(_LevelMask & DTid.x)) ? shared_data[GI ^ j] : shared_data[GI];
GroupMemoryBarrierWithGroupSync();
shared_data[GI] = result;
GroupMemoryBarrierWithGroupSync();
}

// Store shared data
Data[DTid.x] = shared_data[GI];
}


groupshared uint2 transpose_shared_data[TRANSPOSE_BLOCK_SIZE * TRANSPOSE_BLOCK_SIZE];

[numthreads(TRANSPOSE_BLOCK_SIZE, TRANSPOSE_BLOCK_SIZE, 1)]
void MatrixTranspose(uint3 Gid : SV_GroupID, uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID, uint GI : SV_GroupIndex) {
transpose_shared_data[GI] = Input[DTid.y * _Width + DTid.x];
GroupMemoryBarrierWithGroupSync();
uint2 XY = DTid.yx - GTid.yx + GTid.xy;
Data[XY.y * _Height + XY.x] = transpose_shared_data[GTid.x * TRANSPOSE_BLOCK_SIZE + GTid.y];
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Assets/Packages/NearestNeighbor.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions Assets/Packages/NearestNeighbor/2D.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions Assets/Packages/NearestNeighbor/2D/Materials.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file not shown.
8 changes: 8 additions & 0 deletions Assets/Packages/NearestNeighbor/2D/Materials/Render.mat.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Assets/Packages/NearestNeighbor/2D/Scenes.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file not shown.
8 changes: 8 additions & 0 deletions Assets/Packages/NearestNeighbor/2D/Scenes/2D.unity.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions Assets/Packages/NearestNeighbor/2D/Scripts.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 34 additions & 0 deletions Assets/Packages/NearestNeighbor/2D/Scripts/GridOptimizer2D.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using UnityEngine;
using System.Runtime.InteropServices;

namespace NearestNeighbor {
public class GridOptimizer2D<T> : GridOptimizerBase where T : struct {

private Vector2 gridDim;

public GridOptimizer2D(int numObjects, Vector2 range, Vector2 dimension) : base(numObjects) {
this.gridDim = dimension;
this.numGrid = (int)(dimension.x * dimension.y);
this.gridH = range.x / gridDim.x;

this.GridSortCS = (ComputeShader)Resources.Load("GridSort2D");

InitializeBuffer();

Debug.Log("=== Instantiated Grid Sort === \nRange : " + range + "\nNumGrid : " + numGrid + "\nGridDim : " + gridDim + "\nGridH : " + gridH);
}

protected override void InitializeBuffer() {
gridBuffer = new ComputeBuffer(numObjects, Marshal.SizeOf(typeof(Uint2)));
gridPingPongBuffer = new ComputeBuffer(numObjects, Marshal.SizeOf(typeof(Uint2)));
gridIndicesBuffer = new ComputeBuffer(numGrid, Marshal.SizeOf(typeof(Uint2)));
sortedObjectsBufferOutput = new ComputeBuffer(numObjects, Marshal.SizeOf(typeof(T)));
}

protected override void SetCSVariables() {
GridSortCS.SetVector("_GridDim", gridDim);
GridSortCS.SetFloat("_GridH", gridH);
}

}
}
Loading

0 comments on commit fd29f13

Please sign in to comment.