From b2ed9fbe1ad972eda26b31146712ed83e5c07d0f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mika=20Isoj=C3=A4rvi?= Date: Tue, 5 Apr 2016 10:42:09 -0700 Subject: [PATCH] Mask compared bits in atomic operation tests. Bug: 27975797 Change-Id: Id24a784b5b8a665f509218358d58d7eca9a7bb93 --- .../gles31/functional/es31fShaderAtomicOpTests.cpp | 42 ++++++++++++---------- 1 file changed, 24 insertions(+), 18 deletions(-) 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 @@ protected: 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 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 @@ protected: 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 @@ protected: 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< 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 @@ ShaderAtomicOpCase::IterateResult ShaderAtomicCompSwapCase::iterate (void) 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) { -- 2.7.4