OClCollMeshEngn: Produce ambience count; set postrin threshold
We modify the semantics/meaning of the ambience stim feature. It now represents the number of frames whose average intensity is below the ambienceLowVal. We can now implement the postrin as the event wherein the number of frames whose intensity <= ambienceLowVal exceeds postrin-interest-threshold.
This commit is contained in:
@@ -25,8 +25,7 @@ __kernel void collate(
|
||||
__global uchar* assembly,
|
||||
__global float* collation,
|
||||
__global float* intensityBuffer,
|
||||
__global uint* ambienceBuffer,
|
||||
uint ambienceHighVal,
|
||||
__global float* averageIntensityBuffer,
|
||||
uint slotStride,
|
||||
uint nPointsPerSlot,
|
||||
uint nDgramsPerFrame)
|
||||
@@ -55,8 +54,9 @@ __kernel void collate(
|
||||
uint intensityBaseOffset = slotIndex * nPointsPerSlot;
|
||||
DBG_PRINTF("Running kernel: about to process points in slot.\n");
|
||||
|
||||
// Initialize ambience counter for this work item
|
||||
uint ambienceCount = 0;
|
||||
// Initialize running average calculation for this work item
|
||||
float intensitySum = 0.0f;
|
||||
uint validPointCount = 0;
|
||||
|
||||
// Process based on data type using nested ifs (outer) with loops (inner)
|
||||
if (dataType == 0)
|
||||
@@ -97,9 +97,11 @@ __kernel void collate(
|
||||
if (intensityBuffer != NULL) {
|
||||
intensityBuffer[intensityBaseOffset + i] = intensity;
|
||||
}
|
||||
// Count high intensity values for ambience buffer
|
||||
if (intensity >= (float)ambienceHighVal) {
|
||||
++ambienceCount;
|
||||
// Accumulate intensity for average calculation (exclude points where XYZ=0)
|
||||
if (!(x == 0.0f && y == 0.0f && z == 0.0f))
|
||||
{
|
||||
intensitySum += intensity;
|
||||
++validPointCount;
|
||||
}
|
||||
// Don't write intensity to collation buffer
|
||||
}
|
||||
@@ -143,9 +145,11 @@ __kernel void collate(
|
||||
if (intensityBuffer != NULL) {
|
||||
intensityBuffer[intensityBaseOffset + i] = intensity;
|
||||
}
|
||||
// Count high intensity values for ambience buffer
|
||||
if (intensity >= (float)ambienceHighVal) {
|
||||
++ambienceCount;
|
||||
// Accumulate intensity for average calculation (exclude points where XYZ=0)
|
||||
if (!(x == 0.0f && y == 0.0f && z == 0.0f))
|
||||
{
|
||||
intensitySum += intensity;
|
||||
++validPointCount;
|
||||
}
|
||||
// Don't write intensity to collation buffer
|
||||
}
|
||||
@@ -190,9 +194,11 @@ __kernel void collate(
|
||||
if (intensityBuffer != NULL) {
|
||||
intensityBuffer[intensityBaseOffset + pointIndex] = intensity1;
|
||||
}
|
||||
// Count high intensity values for ambience buffer
|
||||
if (intensity1 >= (float)ambienceHighVal) {
|
||||
++ambienceCount;
|
||||
// Accumulate intensity for average calculation (exclude points where XYZ=0)
|
||||
if (!(x1 == 0.0f && y1 == 0.0f && z1 == 0.0f))
|
||||
{
|
||||
intensitySum += intensity1;
|
||||
++validPointCount;
|
||||
}
|
||||
// Don't write intensity to collation buffer
|
||||
++pointIndex;
|
||||
@@ -225,9 +231,11 @@ __kernel void collate(
|
||||
if (intensityBuffer != NULL) {
|
||||
intensityBuffer[intensityBaseOffset + pointIndex] = intensity2;
|
||||
}
|
||||
// Count high intensity values for ambience buffer
|
||||
if (intensity2 >= (float)ambienceHighVal) {
|
||||
++ambienceCount;
|
||||
// Accumulate intensity for average calculation (exclude points where XYZ=0)
|
||||
if (!(x2 == 0.0f && y2 == 0.0f && z2 == 0.0f))
|
||||
{
|
||||
intensitySum += intensity2;
|
||||
++validPointCount;
|
||||
}
|
||||
// Don't write intensity to collation buffer
|
||||
++pointIndex;
|
||||
@@ -273,9 +281,11 @@ __kernel void collate(
|
||||
if (intensityBuffer != NULL) {
|
||||
intensityBuffer[intensityBaseOffset + pointIndex] = intensity1;
|
||||
}
|
||||
// Count high intensity values for ambience buffer
|
||||
if (intensity1 >= (float)ambienceHighVal) {
|
||||
++ambienceCount;
|
||||
// Accumulate intensity for average calculation (exclude points where XYZ=0)
|
||||
if (!(x1 == 0.0f && y1 == 0.0f && z1 == 0.0f))
|
||||
{
|
||||
intensitySum += intensity1;
|
||||
++validPointCount;
|
||||
}
|
||||
// Don't write intensity to collation buffer
|
||||
++pointIndex;
|
||||
@@ -308,9 +318,11 @@ __kernel void collate(
|
||||
if (intensityBuffer != NULL) {
|
||||
intensityBuffer[intensityBaseOffset + pointIndex] = intensity2;
|
||||
}
|
||||
// Count high intensity values for ambience buffer
|
||||
if (intensity2 >= (float)ambienceHighVal) {
|
||||
++ambienceCount;
|
||||
// Accumulate intensity for average calculation (exclude points where XYZ=0)
|
||||
if (!(x2 == 0.0f && y2 == 0.0f && z2 == 0.0f))
|
||||
{
|
||||
intensitySum += intensity2;
|
||||
++validPointCount;
|
||||
}
|
||||
// Don't write intensity to collation buffer
|
||||
++pointIndex;
|
||||
@@ -343,9 +355,11 @@ __kernel void collate(
|
||||
if (intensityBuffer != NULL) {
|
||||
intensityBuffer[intensityBaseOffset + pointIndex] = intensity3;
|
||||
}
|
||||
// Count high intensity values for ambience buffer
|
||||
if (intensity3 >= (float)ambienceHighVal) {
|
||||
++ambienceCount;
|
||||
// Accumulate intensity for average calculation (exclude points where XYZ=0)
|
||||
if (!(x3 == 0.0f && y3 == 0.0f && z3 == 0.0f))
|
||||
{
|
||||
intensitySum += intensity3;
|
||||
++validPointCount;
|
||||
}
|
||||
// Don't write intensity to collation buffer
|
||||
++pointIndex;
|
||||
@@ -353,8 +367,10 @@ __kernel void collate(
|
||||
}
|
||||
// Unsupported data types are silently ignored
|
||||
|
||||
// Write ambience count for this work item (once at the end)
|
||||
if (ambienceBuffer != NULL) {
|
||||
ambienceBuffer[slotIndex] = ambienceCount;
|
||||
// Write average intensity for this work item (once at the end)
|
||||
if (averageIntensityBuffer != NULL)
|
||||
{
|
||||
averageIntensityBuffer[slotIndex] = (validPointCount > 0) ?
|
||||
(intensitySum / (float)validPointCount) : 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user