# Copyright 2016 Google Inc. 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.

# This file defines 'glsl_keys', which is an input to glimp's
# map_glsl_shaders.gypi tool used to map GLSL shaders to platform-specific
# shaders, mapping them by filename.  The 'glsl_keys' variable defined here
# lists all GLSL shaders intended to be used by Cobalt.  Make sure that this
# is included before including 'glimp/map_glsl_shaders.gypi'.

{
  'variables': {
    'glsl_shaders_dir': '<(DEPTH)/cobalt/renderer/glimp_shaders/glsl',
    'glsl_shaders': [
      # A simple shader allowing for full-screen quad blitting, used to enable
      # the transfer of a software-rasterized image to the display.
      'fragment_position_and_texcoord.glsl',
      'fragment_skia_alpha_texcoords_and_color.glsl',
      'fragment_skia_alpha_texcoords_and_color_2.glsl',
      'fragment_skia_antialiased_circle.glsl',
      'fragment_skia_antialiased_color_only.glsl',
      'fragment_skia_antialiased_oval.glsl',
      'fragment_skia_bounded_x_convolution_filtered_texture.glsl',
      'fragment_skia_bounded_y_convolution_filtered_texture.glsl',
      'fragment_skia_circle_masked_alpha_texcoords_and_color.glsl',
      'fragment_skia_circle_masked_alpha_texcoords_and_color_negative.glsl',
      'fragment_skia_circle_masked_circle_edge.glsl',
      'fragment_skia_circle_masked_texture.glsl',
      'fragment_skia_circle_masked_texture_domain.glsl',
      'fragment_skia_circle_masked_texture_negative.glsl',
      'fragment_skia_circle_outside_masked_circle.glsl',
      'fragment_skia_circular_rrect_masked_circle_edge.glsl',
      'fragment_skia_circular_rrect_masked_gr_rrect_blur.glsl',
      'fragment_skia_circular_rrect_masked_rect_blur.glsl',
      'fragment_skia_circular_rrect_masked_rect_ring.glsl',
      'fragment_skia_circular_rrect_masked_texture.glsl',
      'fragment_skia_circular_rrect_masked_texture_negative.glsl',
      'fragment_skia_color_filtered_texture.glsl',
      'fragment_skia_color_only.glsl',
      'fragment_skia_color_with_coverage.glsl',
      'fragment_skia_convolution_filtered_texture.glsl',
      'fragment_skia_distance_field_texture.glsl',
      'fragment_skia_distance_field_texture_non_similar.glsl',
      'fragment_skia_ellipse_masked_rrect.glsl',
      'fragment_skia_ellipse_masked_texture.glsl',
      'fragment_skia_ellipse_masked_texture_domain.glsl',
      'fragment_skia_ellipse_masked_texture_negative.glsl',
      'fragment_skia_ellipse_outside_masked_ellipse.glsl',
      'fragment_skia_ellipse_ring_masked_color.glsl',
      'fragment_skia_linear_gradient_many_colors.glsl',
      'fragment_skia_linear_gradient_three_colors.glsl',
      'fragment_skia_linear_gradient_two_colors.glsl',
      'fragment_skia_nv12.glsl',
      'fragment_skia_radial_gradient_many_colors.glsl',
      'fragment_skia_radial_gradient_three_colors.glsl',
      'fragment_skia_radial_gradient_two_colors.glsl',
      'fragment_skia_rect_blur.glsl',
      'fragment_skia_rect_edge_masked_ellipse.glsl',
      'fragment_skia_rect_outside_masked_color.glsl',
      'fragment_skia_rect_outside_masked_rect_blur.glsl',
      'fragment_skia_rect_outside_masked_texture.glsl',
      'fragment_skia_rrect_masked_circle_edge.glsl',
      'fragment_skia_rrect_masked_texture.glsl',
      'fragment_skia_rrect_masked_texture_negative.glsl',
      'fragment_skia_rrect_ring_masked_ellipse_edge.glsl',
      'fragment_skia_texcoords_and_color.glsl',
      'fragment_skia_texcoords_and_color_with_edge_clamped_texels.glsl',
      'fragment_skia_texture_domain.glsl',
      'fragment_skia_texture_domain_masked_texture_domain.glsl',
      'fragment_skia_texture_masked_texture.glsl',
      'fragment_skia_yuv.glsl',
      'vertex_mesh.glsl',
      'vertex_position_and_texcoord.glsl',
      'vertex_skia_antialiased_circle.glsl',
      'vertex_skia_antialiased_color_only.glsl',
      'vertex_skia_antialiased_oval.glsl',
      'vertex_skia_color_only.glsl',
      'vertex_skia_color_with_coverage.glsl',
      'vertex_skia_ellipse_edge.glsl',
      'vertex_skia_texcoords_and_color.glsl',
      'vertex_skia_texcoords_and_color_with_texcoord_matrix.glsl',
      'vertex_skia_texcoords_derived_from_position.glsl',
      'vertex_skia_two_texcoords_and_color_with_texcoord_matrices.glsl',
      'vertex_skia_two_texcoords_derived_from_position.glsl',
      'vertex_skia_yuv.glsl',
    ],
  }
}
