111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//Copyright (C) 2013 LunarG, Inc.
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//All rights reserved.
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//Redistribution and use in source and binary forms, with or without
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//modification, are permitted provided that the following conditions
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//are met:
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    Redistributions of source code must retain the above copyright
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    notice, this list of conditions and the following disclaimer.
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    Redistributions in binary form must reproduce the above
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    copyright notice, this list of conditions and the following
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    disclaimer in the documentation and/or other materials provided
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    with the distribution.
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    contributors may be used to endorse or promote products derived
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//    from this software without specific prior written permission.
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//POSSIBILITY OF SUCH DAMAGE.
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _RESOURCE_LIMITS_INCLUDED_
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _RESOURCE_LIMITS_INCLUDED_
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct TLimits {
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    bool nonInductiveForLoops;
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    bool whileLoops;
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    bool doWhileLoops;
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    bool generalUniformIndexing;
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    bool generalAttributeMatrixVectorIndexing;
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    bool generalVaryingIndexing;
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    bool generalSamplerIndexing;
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    bool generalVariableIndexing;
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    bool generalConstantMatrixVectorIndexing;
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct TBuiltInResource {
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxLights;
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxClipPlanes;
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTextureUnits;
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTextureCoords;
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVertexAttribs;
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVertexUniformComponents;
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVaryingFloats;
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVertexTextureImageUnits;
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxCombinedTextureImageUnits;
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTextureImageUnits;
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxFragmentUniformComponents;
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxDrawBuffers;
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVertexUniformVectors;
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVaryingVectors;
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxFragmentUniformVectors;
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVertexOutputVectors;
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxFragmentInputVectors;
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int minProgramTexelOffset;
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxProgramTexelOffset;
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxClipDistances;
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeWorkGroupCountX;
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeWorkGroupCountY;
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeWorkGroupCountZ;
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeWorkGroupSizeX;
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeWorkGroupSizeY;
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeWorkGroupSizeZ;
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeUniformComponents;
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeTextureImageUnits;
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeImageUniforms;
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeAtomicCounters;
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxComputeAtomicCounterBuffers;
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVaryingComponents;
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVertexOutputComponents;
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryInputComponents;
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryOutputComponents;
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxFragmentInputComponents;
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxImageUnits;
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxCombinedImageUnitsAndFragmentOutputs;
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxCombinedShaderOutputResources;
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxImageSamples;
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVertexImageUniforms;
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessControlImageUniforms;
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessEvaluationImageUniforms;
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryImageUniforms;
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxFragmentImageUniforms;
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxCombinedImageUniforms;
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryTextureImageUnits;
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryOutputVertices;
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryTotalOutputComponents;
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryUniformComponents;
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryVaryingComponents;
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessControlInputComponents;
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessControlOutputComponents;
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessControlTextureImageUnits;
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessControlUniformComponents;
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessControlTotalOutputComponents;
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessEvaluationInputComponents;
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessEvaluationOutputComponents;
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessEvaluationTextureImageUnits;
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessEvaluationUniformComponents;
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessPatchComponents;
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxPatchVertices;
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessGenLevel;
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxViewports;
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVertexAtomicCounters;
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessControlAtomicCounters;
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessEvaluationAtomicCounters;
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryAtomicCounters;
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxFragmentAtomicCounters;
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxCombinedAtomicCounters;
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxAtomicCounterBindings;
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxVertexAtomicCounterBuffers;
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessControlAtomicCounterBuffers;
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTessEvaluationAtomicCounterBuffers;
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxGeometryAtomicCounterBuffers;
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxFragmentAtomicCounterBuffers;
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxCombinedAtomicCounterBuffers;
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxAtomicCounterBufferSize;
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTransformFeedbackBuffers;
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxTransformFeedbackInterleavedComponents;
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxCullDistances;
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxCombinedClipAndCullDistances;
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    int maxSamples;
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    TLimits limits;
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif // _RESOURCE_LIMITS_INCLUDED_
141