blob: fff4e5889808ea8fd545e3312bdfc7a0f1fe4cee [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "impeller/renderer/backend/gles/capabilities_gles.h"
#include "impeller/renderer/backend/gles/proc_table_gles.h"
namespace impeller {
CapabilitiesGLES::CapabilitiesGLES(const ProcTableGLES& gl) {
{
GLint value = 0;
gl.GetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &value);
max_combined_texture_image_units = value;
}
{
GLint value = 0;
gl.GetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &value);
max_cube_map_texture_size = value;
}
if (gl.GetDescription()->IsES()) {
GLint value = 0;
gl.GetIntegerv(GL_MAX_FRAGMENT_UNIFORM_VECTORS, &value);
max_fragment_uniform_vectors = value;
}
{
GLint value = 0;
gl.GetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &value);
max_renderbuffer_size = value;
}
{
GLint value = 0;
gl.GetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &value);
max_texture_image_units = value;
}
{
GLint value = 0;
gl.GetIntegerv(GL_MAX_TEXTURE_SIZE, &value);
max_texture_size = ISize{value, value};
}
if (gl.GetDescription()->IsES()) {
GLint value = 0;
gl.GetIntegerv(GL_MAX_VARYING_VECTORS, &value);
max_varying_vectors = value;
}
{
GLint value = 0;
gl.GetIntegerv(GL_MAX_VERTEX_ATTRIBS, &value);
max_vertex_attribs = value;
}
{
GLint value = 0;
gl.GetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &value);
max_vertex_texture_image_units = value;
}
if (gl.GetDescription()->IsES()) {
GLint value = 0;
gl.GetIntegerv(GL_MAX_VERTEX_UNIFORM_VECTORS, &value);
max_vertex_uniform_vectors = value;
}
{
GLint values[2] = {};
gl.GetIntegerv(GL_MAX_VIEWPORT_DIMS, values);
max_viewport_dims = ISize{values[0], values[1]};
}
{
GLint value = 0;
gl.GetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &value);
num_compressed_texture_formats = value;
}
if (gl.GetDescription()->IsES()) {
GLint value = 0;
gl.GetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &value);
num_shader_binary_formats = value;
}
}
size_t CapabilitiesGLES::GetMaxTextureUnits(ShaderStage stage) const {
switch (stage) {
case ShaderStage::kVertex:
return max_vertex_texture_image_units;
case ShaderStage::kFragment:
return max_texture_image_units;
case ShaderStage::kUnknown:
case ShaderStage::kTessellationControl:
case ShaderStage::kTessellationEvaluation:
case ShaderStage::kCompute:
return 0u;
}
FML_UNREACHABLE();
}
} // namespace impeller