release-request-a9f2acee-6ca8-47fd-b853-78829f55c314-for-aosp-marshmallow-cts-release-4179564 snap-temp-L11100000082202635
Change-Id: If9a34eb94a3d643f71980a9b052b73a12abd39ba
diff --git a/modules/gles31/functional/es31fShaderAtomicOpTests.cpp b/modules/gles31/functional/es31fShaderAtomicOpTests.cpp
index bef5a40..1e37be0 100644
--- a/modules/gles31/functional/es31fShaderAtomicOpTests.cpp
+++ b/modules/gles31/functional/es31fShaderAtomicOpTests.cpp
@@ -282,14 +282,14 @@
for (int groupNdx = 0; groupNdx < numWorkGroups; groupNdx++)
{
const int groupOffset = groupNdx*workGroupSize;
- const int groupOutput = *(const int*)((const deUint8*)groupOutputs + groupNdx*groupStride);
+ const int groupOutput = *(const deInt32*)((const deUint8*)groupOutputs + groupNdx*groupStride);
set<int> outValues;
bool maxFound = false;
int valueSum = (int)m_initialValue;
for (int localNdx = 0; localNdx < workGroupSize; localNdx++)
{
- const int inputValue = *(const int*)((const deUint8*)inputs + inputStride*(groupOffset+localNdx));
+ const int inputValue = *(const deInt32*)((const deUint8*)inputs + inputStride*(groupOffset+localNdx));
valueSum += inputValue;
}
@@ -301,8 +301,8 @@
for (int localNdx = 0; localNdx < workGroupSize; localNdx++)
{
- const int inputValue = *(const int*)((const deUint8*)inputs + inputStride*(groupOffset+localNdx));
- const int outputValue = *(const int*)((const deUint8*)outputs + outputStride*(groupOffset+localNdx));
+ const int inputValue = *(const deInt32*)((const deUint8*)inputs + inputStride*(groupOffset+localNdx));
+ const int outputValue = *(const deInt32*)((const deUint8*)outputs + outputStride*(groupOffset+localNdx));
if (!de::inRange(outputValue, (int)m_initialValue, valueSum-inputValue))
{
@@ -603,8 +603,11 @@
bool verify (int numValues, int inputStride, const void* inputs, int outputStride, const void* outputs, int groupStride, const void* groupOutputs) const
{
- const int workGroupSize = (int)product(m_workGroupSize);
- const int numWorkGroups = numValues/workGroupSize;
+ const int workGroupSize = (int)product(m_workGroupSize);
+ const int numWorkGroups = numValues/workGroupSize;
+ const int numBits = m_precision == PRECISION_HIGHP ? 32 :
+ m_precision == PRECISION_MEDIUMP ? 16 : 8;
+ const deUint32 compareMask = (m_type == TYPE_UINT || numBits == 32) ? ~0u : (1u<<numBits)-1u;
for (int groupNdx = 0; groupNdx < numWorkGroups; groupNdx++)
{
@@ -618,7 +621,7 @@
expectedValue &= inputValue;
}
- if (expectedValue != groupOutput)
+ if ((groupOutput & compareMask) != (expectedValue & compareMask))
{
m_testCtx.getLog() << TestLog::Message << "ERROR: at group " << groupNdx << ": expected " << tcu::toHex(expectedValue) << ", got " << tcu::toHex(groupOutput) << TestLog::EndMessage;
return false;
@@ -628,7 +631,7 @@
{
const deUint32 outputValue = *(const deUint32*)((const deUint8*)outputs + outputStride*(groupOffset+localNdx));
- if ((outputValue & ~m_initialValue) != 0)
+ if ((compareMask & (outputValue & ~m_initialValue)) != 0)
{
m_testCtx.getLog() << TestLog::Message << "ERROR: at group " << groupNdx << ", invocation " << localNdx
<< ": found unexpected value " << tcu::toHex(outputValue)
@@ -671,8 +674,11 @@
bool verify (int numValues, int inputStride, const void* inputs, int outputStride, const void* outputs, int groupStride, const void* groupOutputs) const
{
- const int workGroupSize = (int)product(m_workGroupSize);
- const int numWorkGroups = numValues/workGroupSize;
+ const int workGroupSize = (int)product(m_workGroupSize);
+ const int numWorkGroups = numValues/workGroupSize;
+ const int numBits = m_precision == PRECISION_HIGHP ? 32 :
+ m_precision == PRECISION_MEDIUMP ? 16 : 8;
+ const deUint32 compareMask = (m_type == TYPE_UINT || numBits == 32) ? ~0u : (1u<<numBits)-1u;
for (int groupNdx = 0; groupNdx < numWorkGroups; groupNdx++)
{
@@ -686,7 +692,7 @@
expectedValue |= inputValue;
}
- if (expectedValue != groupOutput)
+ if ((groupOutput & compareMask) != (expectedValue & compareMask))
{
m_testCtx.getLog() << TestLog::Message << "ERROR: at group " << groupNdx << ": expected " << tcu::toHex(expectedValue) << ", got " << tcu::toHex(groupOutput) << TestLog::EndMessage;
return false;
@@ -696,7 +702,7 @@
{
const deUint32 outputValue = *(const deUint32*)((const deUint8*)outputs + outputStride*(groupOffset+localNdx));
- if ((outputValue & m_initialValue) == 0)
+ if ((compareMask & (outputValue & m_initialValue)) == 0)
{
m_testCtx.getLog() << TestLog::Message << "ERROR: at group " << groupNdx << ", invocation " << localNdx
<< ": found unexpected value " << tcu::toHex(outputValue)
@@ -745,13 +751,13 @@
const int numWorkGroups = numValues/workGroupSize;
const int numBits = m_precision == PRECISION_HIGHP ? 32 :
m_precision == PRECISION_MEDIUMP ? 16 : 8;
- const deUint32 compareMask = numBits == 32 ? ~0u : (1u<<numBits)-1u;
+ const deUint32 compareMask = (m_type == TYPE_UINT || numBits == 32) ? ~0u : (1u<<numBits)-1u;
for (int groupNdx = 0; groupNdx < numWorkGroups; groupNdx++)
{
const int groupOffset = groupNdx*workGroupSize;
const deUint32 groupOutput = *(const deUint32*)((const deUint8*)groupOutputs + groupNdx*groupStride);
- const deUint32 randomValue = *(const int*)((const deUint8*)inputs + inputStride*groupOffset);
+ const deUint32 randomValue = *(const deInt32*)((const deUint8*)inputs + inputStride*groupOffset);
const deUint32 expected0 = randomValue ^ 0u;
const deUint32 expected1 = randomValue ^ ~0u;
int numXorZeros = (m_initialValue == 0) ? 1 : 0;
@@ -828,12 +834,12 @@
for (int groupNdx = 0; groupNdx < numWorkGroups; groupNdx++)
{
const int groupOffset = groupNdx*workGroupSize;
- const int groupOutput = *(const int*)((const deUint8*)groupOutputs + groupNdx*groupStride);
+ const int groupOutput = *(const deInt32*)((const deUint8*)groupOutputs + groupNdx*groupStride);
set<int> usedValues;
for (int localNdx = 0; localNdx < workGroupSize; localNdx++)
{
- const int outputValue = *(const int*)((const deUint8*)outputs + outputStride*(groupOffset+localNdx));
+ const int outputValue = *(const deInt32*)((const deUint8*)outputs + outputStride*(groupOffset+localNdx));
if (!de::inRange(outputValue, 0, workGroupSize) || usedValues.find(outputValue) != usedValues.end())
{
@@ -1043,12 +1049,12 @@
for (int groupNdx = 0; groupNdx < numWorkGroups; groupNdx++)
{
const int groupOffset = groupNdx*workGroupSize;
- const int groupOutput = *(const int*)((const deUint8*)resPtr + groupVarInfo.offset + groupNdx*groupVarInfo.arrayStride);
+ const int groupOutput = *(const deInt32*)((const deUint8*)resPtr + groupVarInfo.offset + groupNdx*groupVarInfo.arrayStride);
for (int localNdx = 0; localNdx < workGroupSize; localNdx++)
{
const int refValue = localNdx;
- const int outputValue = *(const int*)((const deUint8*)resPtr + outVarInfo.offset + outVarInfo.arrayStride*(groupOffset+localNdx));
+ const int outputValue = *(const deInt32*)((const deUint8*)resPtr + outVarInfo.offset + outVarInfo.arrayStride*(groupOffset+localNdx));
if (outputValue != refValue)
{