13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.1 Module 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ------------------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief GLSL Shared variable tests. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es31fShaderSharedVarTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es31fShaderAtomicOpTests.hpp" 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderProgram.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderUtil.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderContext.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluObjectWrapper.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluProgramInterfaceQuery.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuVector.hpp" 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuTestLog.hpp" 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuVectorUtil.hpp" 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuFormatUtil.hpp" 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deRandom.hpp" 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwFunctions.hpp" 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <algorithm> 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <set> 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles31 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Functional 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::string; 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::vector; 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::TestLog; 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing tcu::UVec3; 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing std::set; 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace glu; 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 588852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry MAX_VALUE_ARRAY_LENGTH = 15 // * 2 * sizeof(mat4) + sizeof(int) = 481 uniform components (limit 512) 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrytemplate<typename T, int Size> 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic inline T product (const tcu::Vector<T, Size>& v) 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry T res = v[0]; 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 1; ndx < Size; ndx++) 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res *= v[ndx]; 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return res; 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass SharedBasicVarCase : public TestCase 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedBasicVarCase (Context& context, const char* name, DataType basicType, Precision precision, const tcu::UVec3& workGroupSize); 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~SharedBasicVarCase (void); 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void init (void); 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void deinit (void); 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry IterateResult iterate (void); 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedBasicVarCase (const SharedBasicVarCase& other); 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedBasicVarCase& operator= (const SharedBasicVarCase& other); 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const DataType m_basicType; 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const Precision m_precision; 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::UVec3 m_workGroupSize; 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ShaderProgram* m_program; 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyrystatic std::string getBasicCaseDescription (DataType basicType, Precision precision, const tcu::UVec3& workGroupSize) 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::ostringstream str; 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (precision != PRECISION_LAST) 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry str << getPrecisionName(precision) << " "; 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry str << getDataTypeName(basicType) << ", work group size = " << workGroupSize; 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return str.str(); 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1003c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedBasicVarCase::SharedBasicVarCase (Context& context, const char* name, DataType basicType, Precision precision, const tcu::UVec3& workGroupSize) 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCase (context, name, getBasicCaseDescription(basicType, precision, workGroupSize).c_str()) 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_basicType (basicType) 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_precision (precision) 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_workGroupSize (workGroupSize) 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry , m_program (DE_NULL) 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1093c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedBasicVarCase::~SharedBasicVarCase (void) 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry SharedBasicVarCase::deinit(); 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid SharedBasicVarCase::init (void) 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int valArrayLength = de::min<int>(MAX_VALUE_ARRAY_LENGTH, product(m_workGroupSize)); 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* precName = m_precision != glu::PRECISION_LAST ? getPrecisionName(m_precision) : ""; 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const char* typeName = getDataTypeName(m_basicType); 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::ostringstream src; 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry src << "#version 310 es\n" 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "layout (local_size_x = " << m_workGroupSize[0] 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << ", local_size_y = " << m_workGroupSize[1] 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << ", local_size_z = " << m_workGroupSize[2] 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << ") in;\n" 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "const uint LOCAL_SIZE = gl_WorkGroupSize.x*gl_WorkGroupSize.y*gl_WorkGroupSize.z;\n" 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "shared " << precName << " " << typeName << " s_var;\n" 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "uniform " << precName << " " << typeName << " u_val[" << valArrayLength << "];\n" 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "uniform " << precName << " " << typeName << " u_ref[" << valArrayLength << "];\n" 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "uniform uint u_numIters;\n" 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "layout(binding = 0) buffer Result\n" 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "{\n" 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " bool isOk[LOCAL_SIZE];\n" 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "};\n" 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "\n" 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "void main (void)\n" 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "{\n" 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " bool allOk = true;\n" 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " for (uint ndx = 0u; ndx < u_numIters; ndx++)\n" 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " {\n" 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " if (ndx == gl_LocalInvocationIndex)\n" 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " s_var = u_val[ndx%uint(u_val.length())];\n" 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "\n" 1448852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry << " barrier();\n" 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "\n" 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " if (s_var != u_ref[ndx%uint(u_ref.length())])\n" 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " allOk = false;\n" 148f66298afea59aaebe3b4ac601caf0dbfcefb4f7cPyry Haulos << "\n" 149f66298afea59aaebe3b4ac601caf0dbfcefb4f7cPyry Haulos << " barrier();\n" 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " }\n" 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "\n" 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << " isOk[gl_LocalInvocationIndex] = allOk;\n" 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry << "}\n"; 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(!m_program); 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program = new ShaderProgram(m_context.getRenderContext(), ProgramSources() << ComputeSource(src.str())); 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << *m_program; 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (!m_program->isOk()) 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_program; 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program = DE_NULL; 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry throw tcu::TestError("Compile failed"); 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid SharedBasicVarCase::deinit (void) 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry delete m_program; 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_program = DE_NULL; 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1743c827367444ee418f129b2c238299f49d3264554Jarkko PoyrySharedBasicVarCase::IterateResult SharedBasicVarCase::iterate (void) 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const glw::Functions& gl = m_context.getRenderContext().getFunctions(); 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const deUint32 program = m_program->getProgram(); 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry Buffer outputBuffer (m_context.getRenderContext()); 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const deUint32 outBlockNdx = gl.getProgramResourceIndex(program, GL_SHADER_STORAGE_BLOCK, "Result"); 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const InterfaceBlockInfo outBlockInfo = getProgramInterfaceBlockInfo(gl, program, GL_SHADER_STORAGE_BLOCK, outBlockNdx); 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(program); 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Setup input values. 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int numValues = (int)product(m_workGroupSize); 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int valLoc = gl.getUniformLocation(program, "u_val[0]"); 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int refLoc = gl.getUniformLocation(program, "u_ref[0]"); 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int iterCountLoc = gl.getUniformLocation(program, "u_numIters"); 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int scalarSize = getDataTypeScalarSize(m_basicType); 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (isDataTypeFloatOrVec(m_basicType)) 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int maxInt = m_precision == glu::PRECISION_LOWP ? 2 : 1024; 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int minInt = -de::min(numValues/2, maxInt); 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<float> values (numValues*scalarSize); 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < (int)values.size(); ndx++) 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values[ndx] = float(minInt + (ndx % (maxInt-minInt+1))); 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int uNdx = 0; uNdx < 2; uNdx++) 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int location = uNdx == 1 ? refLoc : valLoc; 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (scalarSize == 1) gl.uniform1fv(location, numValues, &values[0]); 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 2) gl.uniform2fv(location, numValues, &values[0]); 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 3) gl.uniform3fv(location, numValues, &values[0]); 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 4) gl.uniform4fv(location, numValues, &values[0]); 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (isDataTypeIntOrIVec(m_basicType)) 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int maxInt = m_precision == glu::PRECISION_LOWP ? 64 : 1024; 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int minInt = -de::min(numValues/2, maxInt); 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<int> values (numValues*scalarSize); 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < (int)values.size(); ndx++) 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values[ndx] = minInt + (ndx % (maxInt-minInt+1)); 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int uNdx = 0; uNdx < 2; uNdx++) 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int location = uNdx == 1 ? refLoc : valLoc; 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (scalarSize == 1) gl.uniform1iv(location, numValues, &values[0]); 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 2) gl.uniform2iv(location, numValues, &values[0]); 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 3) gl.uniform3iv(location, numValues, &values[0]); 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 4) gl.uniform4iv(location, numValues, &values[0]); 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (isDataTypeUintOrUVec(m_basicType)) 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const deUint32 maxInt = m_precision == glu::PRECISION_LOWP ? 128 : 1024; 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<deUint32> values (numValues*scalarSize); 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < (int)values.size(); ndx++) 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values[ndx] = ndx % (maxInt+1); 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int uNdx = 0; uNdx < 2; uNdx++) 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int location = uNdx == 1 ? refLoc : valLoc; 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (scalarSize == 1) gl.uniform1uiv(location, numValues, &values[0]); 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 2) gl.uniform2uiv(location, numValues, &values[0]); 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 3) gl.uniform3uiv(location, numValues, &values[0]); 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 4) gl.uniform4uiv(location, numValues, &values[0]); 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (isDataTypeBoolOrBVec(m_basicType)) 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Random rnd (0x324f); 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<int> values (numValues*scalarSize); 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < (int)values.size(); ndx++) 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values[ndx] = rnd.getBool() ? 1 : 0; 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int uNdx = 0; uNdx < 2; uNdx++) 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int location = uNdx == 1 ? refLoc : valLoc; 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (scalarSize == 1) gl.uniform1iv(location, numValues, &values[0]); 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 2) gl.uniform2iv(location, numValues, &values[0]); 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 3) gl.uniform3iv(location, numValues, &values[0]); 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (scalarSize == 4) gl.uniform4iv(location, numValues, &values[0]); 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (isDataTypeMatrix(m_basicType)) 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int maxInt = m_precision == glu::PRECISION_LOWP ? 2 : 1024; 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int minInt = -de::min(numValues/2, maxInt); 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<float> values (numValues*scalarSize); 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < (int)values.size(); ndx++) 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values[ndx] = float(minInt + (ndx % (maxInt-minInt+1))); 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int uNdx = 0; uNdx < 2; uNdx++) 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int location = uNdx == 1 ? refLoc : valLoc; 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry switch (m_basicType) 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TYPE_FLOAT_MAT2: gl.uniformMatrix2fv (location, numValues, DE_FALSE, &values[0]); break; 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TYPE_FLOAT_MAT2X3: gl.uniformMatrix2x3fv(location, numValues, DE_FALSE, &values[0]); break; 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TYPE_FLOAT_MAT2X4: gl.uniformMatrix2x4fv(location, numValues, DE_FALSE, &values[0]); break; 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TYPE_FLOAT_MAT3X2: gl.uniformMatrix3x2fv(location, numValues, DE_FALSE, &values[0]); break; 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TYPE_FLOAT_MAT3: gl.uniformMatrix3fv (location, numValues, DE_FALSE, &values[0]); break; 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TYPE_FLOAT_MAT3X4: gl.uniformMatrix3x4fv(location, numValues, DE_FALSE, &values[0]); break; 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TYPE_FLOAT_MAT4X2: gl.uniformMatrix4x2fv(location, numValues, DE_FALSE, &values[0]); break; 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TYPE_FLOAT_MAT4X3: gl.uniformMatrix4x3fv(location, numValues, DE_FALSE, &values[0]); break; 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry case TYPE_FLOAT_MAT4: gl.uniformMatrix4fv (location, numValues, DE_FALSE, &values[0]); break; 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry default: 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1ui(iterCountLoc, product(m_workGroupSize)); 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "Input value setup failed"); 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Setup output buffer. 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vector<deUint8> emptyData(outBlockInfo.dataSize); 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::fill(emptyData.begin(), emptyData.end(), 0); 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_SHADER_STORAGE_BUFFER, *outputBuffer); 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bufferData(GL_SHADER_STORAGE_BUFFER, outBlockInfo.dataSize, &emptyData[0], GL_STATIC_READ); 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, *outputBuffer); 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "Output buffer setup failed"); 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.dispatchCompute(1, 1, 1); 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Read back and compare 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const deUint32 numValues = product(m_workGroupSize); 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const InterfaceVariableInfo outVarInfo = getProgramInterfaceVariableInfo(gl, program, GL_BUFFER_VARIABLE, outBlockInfo.activeVariables[0]); 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const void* resPtr = gl.mapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, outBlockInfo.dataSize, GL_MAP_READ_BIT); 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int maxErrMsg = 10; 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry int numFailed = 0; 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glMapBufferRange()"); 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry TCU_CHECK(resPtr); 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (deUint32 ndx = 0; ndx < numValues; ndx++) 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const int resVal = *((const int*)((const deUint8*)resPtr + outVarInfo.offset + outVarInfo.arrayStride*ndx)); 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (resVal == 0) 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (numFailed < maxErrMsg) 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "ERROR: isOk[" << ndx << "] = " << resVal << " != true" << TestLog::EndMessage; 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (numFailed == maxErrMsg) 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << "..." << TestLog::EndMessage; 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry numFailed += 1; 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.unmapBuffer(GL_SHADER_STORAGE_BUFFER); 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUnmapBuffer()"); 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.getLog() << TestLog::Message << (numValues-numFailed) << " / " << numValues << " values passed" << TestLog::EndMessage; 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry m_testCtx.setTestResult(numFailed == 0 ? QP_TEST_RESULT_PASS : QP_TEST_RESULT_FAIL, 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry numFailed == 0 ? "Pass" : "Comparison failed"); 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry return STOP; 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3513c827367444ee418f129b2c238299f49d3264554Jarkko PoyryShaderSharedVarTests::ShaderSharedVarTests (Context& context) 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup(context, "shared_var", "Shared Variable Tests") 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3563c827367444ee418f129b2c238299f49d3264554Jarkko PoyryShaderSharedVarTests::~ShaderSharedVarTests (void) 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid ShaderSharedVarTests::init (void) 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // .basic_type 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup *const basicTypeGroup = new tcu::TestCaseGroup(m_testCtx, "basic_type", "Basic Types"); 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(basicTypeGroup); 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int basicType = TYPE_FLOAT; basicType <= TYPE_BOOL_VEC4; basicType++) 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (glu::isDataTypeBoolOrBVec(DataType(basicType))) 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::UVec3 workGroupSize (2,1,3); 3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry basicTypeGroup->addChild(new SharedBasicVarCase(m_context, getDataTypeName(DataType(basicType)), DataType(basicType), PRECISION_LAST, workGroupSize)); 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int precision = 0; precision < PRECISION_LAST; precision++) 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const tcu::UVec3 workGroupSize (2,1,3); 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry const string name = string(getDataTypeName(DataType(basicType))) + "_" + getPrecisionName(Precision(precision)); 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry basicTypeGroup->addChild(new SharedBasicVarCase(m_context, name.c_str(), DataType(basicType), Precision(precision), workGroupSize)); 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // .work_group_size 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup *const workGroupSizeGroup = new tcu::TestCaseGroup(m_testCtx, "work_group_size", "Shared Variables with Various Work Group Sizes"); 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(workGroupSizeGroup); 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "float_1_1_1", TYPE_FLOAT, PRECISION_HIGHP, tcu::UVec3(1,1,1))); 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "float_64_1_1", TYPE_FLOAT, PRECISION_HIGHP, tcu::UVec3(64,1,1))); 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "float_1_64_1", TYPE_FLOAT, PRECISION_HIGHP, tcu::UVec3(1,64,1))); 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "float_1_1_64", TYPE_FLOAT, PRECISION_HIGHP, tcu::UVec3(1,1,64))); 3968852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "float_128_1_1", TYPE_FLOAT, PRECISION_HIGHP, tcu::UVec3(128,1,1))); 3978852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "float_1_128_1", TYPE_FLOAT, PRECISION_HIGHP, tcu::UVec3(1,128,1))); 3988852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "float_13_2_4", TYPE_FLOAT, PRECISION_HIGHP, tcu::UVec3(13,2,4))); 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "vec4_1_1_1", TYPE_FLOAT_VEC4, PRECISION_HIGHP, tcu::UVec3(1,1,1))); 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "vec4_64_1_1", TYPE_FLOAT_VEC4, PRECISION_HIGHP, tcu::UVec3(64,1,1))); 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "vec4_1_64_1", TYPE_FLOAT_VEC4, PRECISION_HIGHP, tcu::UVec3(1,64,1))); 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "vec4_1_1_64", TYPE_FLOAT_VEC4, PRECISION_HIGHP, tcu::UVec3(1,1,64))); 4048852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "vec4_128_1_1", TYPE_FLOAT_VEC4, PRECISION_HIGHP, tcu::UVec3(128,1,1))); 4058852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "vec4_1_128_1", TYPE_FLOAT_VEC4, PRECISION_HIGHP, tcu::UVec3(1,128,1))); 4068852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "vec4_13_2_4", TYPE_FLOAT_VEC4, PRECISION_HIGHP, tcu::UVec3(13,2,4))); 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "mat4_1_1_1", TYPE_FLOAT_MAT4, PRECISION_HIGHP, tcu::UVec3(1,1,1))); 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "mat4_64_1_1", TYPE_FLOAT_MAT4, PRECISION_HIGHP, tcu::UVec3(64,1,1))); 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "mat4_1_64_1", TYPE_FLOAT_MAT4, PRECISION_HIGHP, tcu::UVec3(1,64,1))); 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "mat4_1_1_64", TYPE_FLOAT_MAT4, PRECISION_HIGHP, tcu::UVec3(1,1,64))); 4128852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "mat4_128_1_1", TYPE_FLOAT_MAT4, PRECISION_HIGHP, tcu::UVec3(128,1,1))); 4138852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "mat4_1_128_1", TYPE_FLOAT_MAT4, PRECISION_HIGHP, tcu::UVec3(1,128,1))); 4148852c82a1ffa4760985c17cc6875d5d521daf343Jarkko Poyry workGroupSizeGroup->addChild(new SharedBasicVarCase(m_context, "mat4_13_2_4", TYPE_FLOAT_MAT4, PRECISION_HIGHP, tcu::UVec3(13,2,4))); 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // .atomic 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(new ShaderAtomicOpTests(m_context, "atomic", ATOMIC_OPERAND_SHARED_VARIABLE)); 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Functional 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles31 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 424