Material Clustering Benchmark
DispatcherRSfixed.cs
Go to the documentation of this file.
1using UnityEngine;
2using static Diagnostics;
3
5{
7 {
8 public override bool usesStopCondition => false;
9
10 private readonly bool doReadback;
11
13 ComputeShader computeShader,
14 int numIterations,
17 bool doReadback,
20 )
21 : base(
28 )
29 {
30 Assert(
32 iterationsKM: parameters.numIterationsKm,
33 iterations: numIterations
34 ),
35 "Invalid number of iterations supplied to random swap dispatcher."
36 );
37
38 this.doReadback = doReadback;
39 }
40
41 public override bool doesReadback => this.doReadback;
42
43 public override string name => this.doesReadback ? $"{base.name} (readback)" : base.name;
44
45 public override void RunClustering(ClusteringTextures clusteringTextures)
46 {
47 this.KMiteration(clusteringTextures, rejectOld: true);
48
49 for (int i = 1; i < this.numIterations; i += this.parameters.numIterationsKm)
50 {
51 this.RandomSwap(clusteringTextures);
52
53 for (int k = 0; k < this.parameters.numIterationsKm; k++)
54 {
55 this.KMiteration(clusteringTextures, rejectOld: false);
56 }
57
58 if (this.doReadback)
59 {
61 }
62 else
63 {
65 }
66 }
67 }
68
69 public static bool IsNumIterationsValid(int iterationsKM, int iterations)
70 {
71 if (iterations <= 1)
72 {
73 return false;
74 }
75 if (iterationsKM == 1)
76 {
77 return true;
78 }
79
80 bool result = iterations % iterationsKM == 1;
81
82 return result;
83 }
84 }
85}
ClusteringRTsAndBuffers clusteringRTsAndBuffers
Definition: ADispatcher.cs:11
readonly ComputeShader computeShader
Definition: ADispatcher.cs:28
RandomSwapResult ValidateCandidatesReadback()
void RandomSwap(ClusteringTextures clusteringTextures)
Call Allocate before using and Dispose after using.
void KMiteration(ClusteringTextures textures, bool rejectOld)
First attributes pixels to clusters. Then updates cluster centers. In order to use the resulting clus...
Definition: DispatcherKM.cs:46
static bool IsNumIterationsValid(int iterationsKM, int iterations)
DispatcherRSfixed(ComputeShader computeShader, int numIterations, bool doRandomizeEmptyClusters, bool useFullResTexRef, bool doReadback, ADispatcherRS.Parameters parameters, ClusteringRTsAndBuffers clusteringRTsAndBuffers)
override void RunClustering(ClusteringTextures clusteringTextures)
Call Dispose after using.