Skip to content

wrongfully fails on loop in my kernel #172

@liufeicc

Description

@liufeicc

ERROR IN Function isHidden

com.aparapi.internal.instruction.ExpressionList
LINE 526:might be mistaken for a do while!

Here are some of my code:
@OverRide
public void run()
{
int triangleIdx = getGlobalId();

	int firstVertex = indexBuffer[triangleIdx * 3 + 2];
	int secondVertex = indexBuffer[triangleIdx * 3 + 1];
	int thirdVertex = indexBuffer[triangleIdx * 3];
	
	setVertex(VIdxN3(triangleIdx, 0), updatedVertices, firstVertex, updatedVertexBuffer);
	setVertex(VIdxN3(triangleIdx, 1), updatedVertices, secondVertex, updatedVertexBuffer);
	setVertex(VIdxN3(triangleIdx, 2), updatedVertices, thirdVertex, updatedVertexBuffer);
	
	vertexLightLevel[N4(triangleIdx, 0)] = vertexLightLevelBuffer[firstVertex];
	vertexLightLevel[N4(triangleIdx, 1)] = vertexLightLevelBuffer[secondVertex];
	vertexLightLevel[N4(triangleIdx, 2)] = vertexLightLevelBuffer[thirdVertex];
	
	if(isHidden(triangleIdx))
	  	return;
	
	if(clipZNearPlane(triangleIdx))
		return;
	
	if(colorRenderType == 2) 
		transformTexture(triangleIdx, firstVertex);
	else if(colorRenderType == 3)
		transformBarycentricTextured(triangleIdx);

	scanTriangle(triangleIdx);
}

private boolean isHidden(int triangleIdx)
{		
	boolean allBehindClippingPlane = true;
	for (int i = 0; i < 3; i++)
	{
		if (ZN33(triangleIdx, i) >= nearClipDistance)
		{
			allBehindClippingPlane = false;
			break;
		}
	}
	if (allBehindClippingPlane)
		return true;

	setVertex(triangleIdx, edge1, VIdxN3(triangleIdx, 1), updatedVertices);
	sub(triangleIdx, edge1, VIdxN3(triangleIdx, 0), updatedVertices);
	setVertex(triangleIdx, edge2, VIdxN3(triangleIdx, 2), updatedVertices);
	sub(triangleIdx, edge2, VIdxN3(triangleIdx, 0), updatedVertices);
	cross(triangleIdx, surfaceNormal, triangleIdx, edge1, triangleIdx, edge2);
	float dotProduct = dot(triangleIdx, surfaceNormal, VIdxN3(triangleIdx, 0), updatedVertices);
	if (dotProduct >= 0)
		return true;

	testBoundary(triangleIdx);

	if (leftMostPosition[triangleIdx] == SCREEN_W 
			|| rightMostPosition[triangleIdx] == -1 
			|| upperMostPosition[triangleIdx] == SCREEN_H
			|| lowerMostPosition[triangleIdx] == -1)
		return true;

	isClippingRightOrLeft[triangleIdx] = false;
	if (leftMostPosition[triangleIdx] < 0 || rightMostPosition[triangleIdx] >= SCREEN_W)
		isClippingRightOrLeft[triangleIdx] = true;

	return false;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions