|
@@ -6063,11 +6063,10 @@
|
|
<ParameterType Array="true" Name="Validation.Keys">String</ParameterType>
|
|
<ParameterType Array="true" Name="Validation.Keys">String</ParameterType>
|
|
<ParameterType Array="true" Name="Validation.Values">String</ParameterType>
|
|
<ParameterType Array="true" Name="Validation.Values">String</ParameterType>
|
|
</ParameterTypes>
|
|
</ParameterTypes>
|
|
- <Row Name="WaveMultiPrefixBitAnd">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixBitAnd</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixBitXor">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixBitXor</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6075,31 +6074,21 @@
|
|
int value;
|
|
int value;
|
|
int result;
|
|
int result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixBitAnd(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixBitXor(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixBitAnd(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixBitXor(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6122,11 +6111,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixBitOr">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixBitOr</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixCountBits">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixCountBits</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6134,31 +6122,21 @@
|
|
int value;
|
|
int value;
|
|
int result;
|
|
int result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixBitOr(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixCountBits(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixBitOr(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixCountBits(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6181,11 +6159,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixBitXor">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixBitXor</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixSum">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixSum</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6193,31 +6170,21 @@
|
|
int value;
|
|
int value;
|
|
int result;
|
|
int result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixBitXor(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixSum(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixBitXor(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixSum(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6240,11 +6207,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixSum">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixSum</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixBitAnd">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixBitAnd</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6252,31 +6218,21 @@
|
|
int value;
|
|
int value;
|
|
int result;
|
|
int result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixSum(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixBitAnd(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixSum(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixBitAnd(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6299,11 +6255,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixProduct">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixProduct</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixBitOr">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixBitOr</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6311,31 +6266,21 @@
|
|
int value;
|
|
int value;
|
|
int result;
|
|
int result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixProduct(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixBitOr(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixProduct(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixBitOr(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6358,11 +6303,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixCountBits">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixCountBits</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixProduct">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixProduct</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6370,31 +6314,21 @@
|
|
int value;
|
|
int value;
|
|
int result;
|
|
int result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixCountBits(data.value > 10, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixProduct(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixCountBits(data.value > 10, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixProduct(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6425,11 +6359,10 @@
|
|
<ParameterType Array="true" Name="Validation.Keys">String</ParameterType>
|
|
<ParameterType Array="true" Name="Validation.Keys">String</ParameterType>
|
|
<ParameterType Array="true" Name="Validation.Values">String</ParameterType>
|
|
<ParameterType Array="true" Name="Validation.Values">String</ParameterType>
|
|
</ParameterTypes>
|
|
</ParameterTypes>
|
|
- <Row Name="WaveMultiPrefixBitAnd">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixBitAnd</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixUBitAnd">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixUBitAnd</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6437,20 +6370,12 @@
|
|
uint value;
|
|
uint value;
|
|
uint result;
|
|
uint result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
data.result = WaveMultiPrefixBitAnd(data.value, mask);
|
|
data.result = WaveMultiPrefixBitAnd(data.value, mask);
|
|
@@ -6458,10 +6383,8 @@
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
data.result = WaveMultiPrefixBitAnd(data.value, mask);
|
|
data.result = WaveMultiPrefixBitAnd(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6484,11 +6407,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixBitOr">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixBitOr</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixUBitOr">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixUBitOr</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6496,20 +6418,12 @@
|
|
uint value;
|
|
uint value;
|
|
uint result;
|
|
uint result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
data.result = WaveMultiPrefixBitOr(data.value, mask);
|
|
data.result = WaveMultiPrefixBitOr(data.value, mask);
|
|
@@ -6517,10 +6431,8 @@
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
data.result = WaveMultiPrefixBitOr(data.value, mask);
|
|
data.result = WaveMultiPrefixBitOr(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6543,11 +6455,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixBitXor">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixBitXor</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixUSum">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixUSum</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6555,31 +6466,21 @@
|
|
uint value;
|
|
uint value;
|
|
uint result;
|
|
uint result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixBitXor(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixSum(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixBitXor(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixSum(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6602,11 +6503,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixUSum">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixUSum</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixUProduct">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixUProduct</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6614,31 +6514,21 @@
|
|
uint value;
|
|
uint value;
|
|
uint result;
|
|
uint result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixSum(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixProduct(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixSum(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixProduct(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6661,11 +6551,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixUSum">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixUProduct</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixUBitXor">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixUBitXor</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6673,31 +6562,21 @@
|
|
uint value;
|
|
uint value;
|
|
uint result;
|
|
uint result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixProduct(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixBitXor(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixProduct(data.value, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixBitXor(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|
|
@@ -6720,11 +6599,10 @@
|
|
<Value>34</Value>
|
|
<Value>34</Value>
|
|
</Parameter>
|
|
</Parameter>
|
|
</Row>
|
|
</Row>
|
|
- <Row Name="WaveMultiPrefixCountBits">
|
|
|
|
- <Parameter Name="ShaderOp.Name">WaveMultiPrefixCountBits</Parameter>
|
|
|
|
|
|
+ <Row Name="WaveMultiPrefixUCountBits">
|
|
|
|
+ <Parameter Name="ShaderOp.Name">WaveMultiPrefixUCountBits</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
<Parameter Name="ShaderOp.Target">cs_6_5</Parameter>
|
|
- <Parameter Name="ShaderOp.Text">
|
|
|
|
- struct ThreadData {
|
|
|
|
|
|
+ <Parameter Name="ShaderOp.Text"> struct ThreadData {
|
|
uint key;
|
|
uint key;
|
|
uint firstLaneId;
|
|
uint firstLaneId;
|
|
uint laneId;
|
|
uint laneId;
|
|
@@ -6732,31 +6610,21 @@
|
|
uint value;
|
|
uint value;
|
|
uint result;
|
|
uint result;
|
|
};
|
|
};
|
|
-
|
|
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
RWStructuredBuffer<ThreadData> g_buffer : register(u0);
|
|
-
|
|
|
|
[numthreads(8, 12, 1)]
|
|
[numthreads(8, 12, 1)]
|
|
- void main
|
|
|
|
- (
|
|
|
|
- uint id : SV_GroupIndex
|
|
|
|
- )
|
|
|
|
- {
|
|
|
|
|
|
+ void main(uint id : SV_GroupIndex) {
|
|
ThreadData data = g_buffer[id];
|
|
ThreadData data = g_buffer[id];
|
|
-
|
|
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.firstLaneId = WaveReadLaneFirst(id);
|
|
data.laneId = WaveGetLaneIndex();
|
|
data.laneId = WaveGetLaneIndex();
|
|
-
|
|
|
|
if (data.mask != 0) {
|
|
if (data.mask != 0) {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixCountBits(data.value > 10, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixCountBits(data.value, mask);
|
|
} else {
|
|
} else {
|
|
uint4 mask = WaveMatch(data.key);
|
|
uint4 mask = WaveMatch(data.key);
|
|
- data.result = WaveMultiPrefixCountBits(data.value > 10, mask);
|
|
|
|
|
|
+ data.result = WaveMultiPrefixCountBits(data.value, mask);
|
|
}
|
|
}
|
|
-
|
|
|
|
g_buffer[id] = data;
|
|
g_buffer[id] = data;
|
|
- }
|
|
|
|
- </Parameter>
|
|
|
|
|
|
+ }</Parameter>
|
|
<Parameter Name="Validation.Keys">
|
|
<Parameter Name="Validation.Keys">
|
|
<Value>0</Value>
|
|
<Value>0</Value>
|
|
<Value>3</Value>
|
|
<Value>3</Value>
|