// Copyright 2015 The Shaderc Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "libshaderc_util/resources.h" #include "glslang/Include/ResourceLimits.h" namespace shaderc_util { // These numbers come from the OpenGL 4.4 core profile specification Chapter 23 // unless otherwise specified. const TBuiltInResource kDefaultTBuiltInResource = { /*.maxLights = */ 8, // From OpenGL 3.0 table 6.46. /*.maxClipPlanes = */ 6, // From OpenGL 3.0 table 6.46. /*.maxTextureUnits = */ 2, // From OpenGL 3.0 table 6.50. /*.maxTextureCoords = */ 8, // From OpenGL 3.0 table 6.50. /*.maxVertexAttribs = */ 16, /*.maxVertexUniformComponents = */ 4096, /*.maxVaryingFloats = */ 60, // From OpenGLES 3.1 table 6.44. /*.maxVertexTextureImageUnits = */ 16, /*.maxCombinedTextureImageUnits = */ 80, /*.maxTextureImageUnits = */ 16, /*.maxFragmentUniformComponents = */ 1024, // glslang has 32 maxDrawBuffers. // Pixel phone Vulkan driver in Android N has 8 // maxFragmentOutputAttachments. /*.maxDrawBuffers = */ 8, /*.maxVertexUniformVectors = */ 256, /*.maxVaryingVectors = */ 15, // From OpenGLES 3.1 table 6.44. /*.maxFragmentUniformVectors = */ 256, /*.maxVertexOutputVectors = */ 16, // maxVertexOutputComponents / 4 /*.maxFragmentInputVectors = */ 15, // maxFragmentInputComponents / 4 /*.minProgramTexelOffset = */ -8, /*.maxProgramTexelOffset = */ 7, /*.maxClipDistances = */ 8, /*.maxComputeWorkGroupCountX = */ 65535, /*.maxComputeWorkGroupCountY = */ 65535, /*.maxComputeWorkGroupCountZ = */ 65535, /*.maxComputeWorkGroupSizeX = */ 1024, /*.maxComputeWorkGroupSizeX = */ 1024, /*.maxComputeWorkGroupSizeZ = */ 64, /*.maxComputeUniformComponents = */ 512, /*.maxComputeTextureImageUnits = */ 16, /*.maxComputeImageUniforms = */ 8, /*.maxComputeAtomicCounters = */ 8, /*.maxComputeAtomicCounterBuffers = */ 1, // From OpenGLES 3.1 Table 6.43 /*.maxVaryingComponents = */ 60, /*.maxVertexOutputComponents = */ 64, /*.maxGeometryInputComponents = */ 64, /*.maxGeometryOutputComponents = */ 128, /*.maxFragmentInputComponents = */ 128, /*.maxImageUnits = */ 8, // This does not seem to be defined anywhere, // set to ImageUnits. /*.maxCombinedImageUnitsAndFragmentOutputs = */ 8, /*.maxCombinedShaderOutputResources = */ 8, /*.maxImageSamples = */ 0, /*.maxVertexImageUniforms = */ 0, /*.maxTessControlImageUniforms = */ 0, /*.maxTessEvaluationImageUniforms = */ 0, /*.maxGeometryImageUniforms = */ 0, /*.maxFragmentImageUniforms = */ 8, /*.maxCombinedImageUniforms = */ 8, /*.maxGeometryTextureImageUnits = */ 16, /*.maxGeometryOutputVertices = */ 256, /*.maxGeometryTotalOutputComponents = */ 1024, /*.maxGeometryUniformComponents = */ 512, /*.maxGeometryVaryingComponents = */ 60, // Does not seem to be defined // anywhere, set equal to // maxVaryingComponents. /*.maxTessControlInputComponents = */ 128, /*.maxTessControlOutputComponents = */ 128, /*.maxTessControlTextureImageUnits = */ 16, /*.maxTessControlUniformComponents = */ 1024, /*.maxTessControlTotalOutputComponents = */ 4096, /*.maxTessEvaluationInputComponents = */ 128, /*.maxTessEvaluationOutputComponents = */ 128, /*.maxTessEvaluationTextureImageUnits = */ 16, /*.maxTessEvaluationUniformComponents = */ 1024, /*.maxTessPatchComponents = */ 120, /*.maxPatchVertices = */ 32, /*.maxTessGenLevel = */ 64, /*.maxViewports = */ 16, /*.maxVertexAtomicCounters = */ 0, /*.maxTessControlAtomicCounters = */ 0, /*.maxTessEvaluationAtomicCounters = */ 0, /*.maxGeometryAtomicCounters = */ 0, /*.maxFragmentAtomicCounters = */ 8, /*.maxCombinedAtomicCounters = */ 8, /*.maxAtomicCounterBindings = */ 1, /*.maxVertexAtomicCounterBuffers = */ 0, // From OpenGLES 3.1 Table 6.41. // ARB_shader_atomic_counters. /*.maxTessControlAtomicCounterBuffers = */ 0, /*.maxTessEvaluationAtomicCounterBuffers = */ 0, /*.maxGeometryAtomicCounterBuffers = */ 0, // /ARB_shader_atomic_counters. /*.maxFragmentAtomicCounterBuffers = */ 0, // From OpenGLES 3.1 Table 6.43. /*.maxCombinedAtomicCounterBuffers = */ 1, /*.maxAtomicCounterBufferSize = */ 32, /*.maxTransformFeedbackBuffers = */ 4, /*.maxTransformFeedbackInterleavedComponents = */ 64, /*.maxCullDistances = */ 8, // ARB_cull_distance. /*.maxCombinedClipAndCullDistances = */ 8, // ARB_cull_distance. /*.maxSamples = */ 4, // This is the glslang TLimits structure. // It defines whether or not the following features are enabled. // We want them to all be enabled. /*.limits = */ { /*.nonInductiveForLoops = */ 1, /*.whileLoops = */ 1, /*.doWhileLoops = */ 1, /*.generalUniformIndexing = */ 1, /*.generalAttributeMatrixVectorIndexing = */ 1, /*.generalVaryingIndexing = */ 1, /*.generalSamplerIndexing = */ 1, /*.generalVariableIndexing = */ 1, /*.generalConstantMatrixVectorIndexing = */ 1, }}; } // namespace shaderc_util