// gpu/ipc/common/capabilities.mojom-send-validation.h is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef GPU_IPC_COMMON_CAPABILITIES_MOJOM_SEND_VALIDATION_H_
#define GPU_IPC_COMMON_CAPABILITIES_MOJOM_SEND_VALIDATION_H_

#include "gpu/ipc/common/capabilities.mojom-shared-internal.h"
#include "services/viz/public/mojom/compositing/shared_image_format.mojom-shared.h"

#include "gpu/ipc/common/capabilities.mojom-data-view.h"

#include "mojo/public/cpp/bindings/lib/send_validation_type.h"
#include "mojo/public/cpp/bindings/lib/send_validation.h"

namespace mojo::internal {

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::gpu::mojom::CapabilitiesDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::gpu::mojom::CapabilitiesDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::gpu::mojom::internal::Capabilities_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      fragment->max_texture_size = Traits::max_texture_size(input);

      fragment->egl_image_external = Traits::egl_image_external(input);

      fragment->texture_format_bgra8888 = Traits::texture_format_bgra8888(input);

      fragment->texture_format_etc1_npot = Traits::texture_format_etc1_npot(input);

      fragment->disable_mac_swangle_rgbx = Traits::disable_mac_swangle_rgbx(input);

      fragment->sync_query = Traits::sync_query(input);

      fragment->texture_rg = Traits::texture_rg(input);

      fragment->texture_norm16 = Traits::texture_norm16(input);

      fragment->texture_half_float_linear = Traits::texture_half_float_linear(input);

      fragment->image_ar30 = Traits::image_ar30(input);

      fragment->image_ab30 = Traits::image_ab30(input);

      fragment->render_buffer_format_bgra8888 = Traits::render_buffer_format_bgra8888(input);

      fragment->msaa_is_slow = Traits::msaa_is_slow(input);

      fragment->avoid_stencil_buffers = Traits::avoid_stencil_buffers(input);

      fragment->supports_rgb_to_yuv_conversion = Traits::supports_rgb_to_yuv_conversion(input);

      fragment->supports_yuv_readback = Traits::supports_yuv_readback(input);

      fragment->mesa_framebuffer_flip_y = Traits::mesa_framebuffer_flip_y(input);

      fragment->context_supports_distance_field_text = Traits::context_supports_distance_field_text(input);

      fragment->using_vulkan_context = Traits::using_vulkan_context(input);

      fragment->use_deferred_graphite_submit = Traits::use_deferred_graphite_submit(input);

      decltype(Traits::drm_formats_and_modifiers(input)) in_drm_formats_and_modifiers = Traits::drm_formats_and_modifiers(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->drm_formats_and_modifiers)::BaseType>
          drm_formats_and_modifiers_fragment(fragment.message());
      constexpr const mojo::internal::ContainerValidateParams& drm_formats_and_modifiers_validate_params =
          mojo::internal::GetMapValidator<*&mojo::internal::GetArrayValidator<0, false, nullptr>(), *&mojo::internal::GetArrayValidator<0, false, &mojo::internal::GetArrayValidator<0, false, nullptr>()>()>();
      
      mojo::internal::Serialize<mojo::MapDataView<uint32_t, mojo::ArrayDataView<uint64_t>>, send_validation>(
        in_drm_formats_and_modifiers,
        drm_formats_and_modifiers_fragment,
        &drm_formats_and_modifiers_validate_params);

      fragment->drm_formats_and_modifiers.Set(
          drm_formats_and_modifiers_fragment.is_null() ? nullptr : drm_formats_and_modifiers_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->drm_formats_and_modifiers.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null drm_formats_and_modifiers in Capabilities struct");

      fragment->drm_device_id = Traits::drm_device_id(input);
  }
};

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::gpu::mojom::ShaderPrecisionDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::gpu::mojom::ShaderPrecisionDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::gpu::mojom::internal::ShaderPrecision_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      fragment->min_range = Traits::min_range(input);

      fragment->max_range = Traits::max_range(input);

      fragment->precision = Traits::precision(input);
  }
};

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::gpu::mojom::PerStagePrecisionsDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::gpu::mojom::PerStagePrecisionsDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::gpu::mojom::internal::PerStagePrecisions_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      decltype(Traits::low_int(input)) in_low_int = Traits::low_int(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->low_int)::BaseType> low_int_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::gpu::mojom::ShaderPrecisionDataView, send_validation>(
        in_low_int,
        low_int_fragment);

      fragment->low_int.Set(
          low_int_fragment.is_null() ? nullptr : low_int_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->low_int.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null low_int in PerStagePrecisions struct");

      decltype(Traits::medium_int(input)) in_medium_int = Traits::medium_int(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->medium_int)::BaseType> medium_int_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::gpu::mojom::ShaderPrecisionDataView, send_validation>(
        in_medium_int,
        medium_int_fragment);

      fragment->medium_int.Set(
          medium_int_fragment.is_null() ? nullptr : medium_int_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->medium_int.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null medium_int in PerStagePrecisions struct");

      decltype(Traits::high_int(input)) in_high_int = Traits::high_int(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->high_int)::BaseType> high_int_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::gpu::mojom::ShaderPrecisionDataView, send_validation>(
        in_high_int,
        high_int_fragment);

      fragment->high_int.Set(
          high_int_fragment.is_null() ? nullptr : high_int_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->high_int.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null high_int in PerStagePrecisions struct");

      decltype(Traits::low_float(input)) in_low_float = Traits::low_float(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->low_float)::BaseType> low_float_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::gpu::mojom::ShaderPrecisionDataView, send_validation>(
        in_low_float,
        low_float_fragment);

      fragment->low_float.Set(
          low_float_fragment.is_null() ? nullptr : low_float_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->low_float.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null low_float in PerStagePrecisions struct");

      decltype(Traits::medium_float(input)) in_medium_float = Traits::medium_float(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->medium_float)::BaseType> medium_float_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::gpu::mojom::ShaderPrecisionDataView, send_validation>(
        in_medium_float,
        medium_float_fragment);

      fragment->medium_float.Set(
          medium_float_fragment.is_null() ? nullptr : medium_float_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->medium_float.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null medium_float in PerStagePrecisions struct");

      decltype(Traits::high_float(input)) in_high_float = Traits::high_float(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->high_float)::BaseType> high_float_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::gpu::mojom::ShaderPrecisionDataView, send_validation>(
        in_high_float,
        high_float_fragment);

      fragment->high_float.Set(
          high_float_fragment.is_null() ? nullptr : high_float_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->high_float.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null high_float in PerStagePrecisions struct");
  }
};

template <typename MaybeConstUserType, mojo::internal::SendValidation send_validation>
struct SendValidationSerializer<::gpu::mojom::GLCapabilitiesDataView, MaybeConstUserType, send_validation> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::gpu::mojom::GLCapabilitiesDataView, UserType>;
  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::gpu::mojom::internal::GLCapabilities_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

      decltype(Traits::vertex_shader_precisions(input)) in_vertex_shader_precisions = Traits::vertex_shader_precisions(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->vertex_shader_precisions)::BaseType> vertex_shader_precisions_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::gpu::mojom::PerStagePrecisionsDataView, send_validation>(
        in_vertex_shader_precisions,
        vertex_shader_precisions_fragment);

      fragment->vertex_shader_precisions.Set(
          vertex_shader_precisions_fragment.is_null() ? nullptr : vertex_shader_precisions_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->vertex_shader_precisions.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null vertex_shader_precisions in GLCapabilities struct");

      decltype(Traits::fragment_shader_precisions(input)) in_fragment_shader_precisions = Traits::fragment_shader_precisions(input);
      mojo::internal::MessageFragment<
          typename decltype(fragment->fragment_shader_precisions)::BaseType> fragment_shader_precisions_fragment(
              fragment.message());
      
      mojo::internal::Serialize<::gpu::mojom::PerStagePrecisionsDataView, send_validation>(
        in_fragment_shader_precisions,
        fragment_shader_precisions_fragment);

      fragment->fragment_shader_precisions.Set(
          fragment_shader_precisions_fragment.is_null() ? nullptr : fragment_shader_precisions_fragment.data());

      
      MOJO_INTERNAL_CHECK_SERIALIZATION(
        send_validation,
        !(fragment->fragment_shader_precisions.is_null()),
        mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
        "null fragment_shader_precisions in GLCapabilities struct");

      fragment->major_version = Traits::major_version(input);

      fragment->minor_version = Traits::minor_version(input);

      fragment->max_combined_texture_image_units = Traits::max_combined_texture_image_units(input);

      fragment->max_cube_map_texture_size = Traits::max_cube_map_texture_size(input);

      fragment->max_fragment_uniform_vectors = Traits::max_fragment_uniform_vectors(input);

      fragment->max_renderbuffer_size = Traits::max_renderbuffer_size(input);

      fragment->max_texture_image_units = Traits::max_texture_image_units(input);

      fragment->max_varying_vectors = Traits::max_varying_vectors(input);

      fragment->max_vertex_attribs = Traits::max_vertex_attribs(input);

      fragment->max_vertex_texture_image_units = Traits::max_vertex_texture_image_units(input);

      fragment->max_vertex_uniform_vectors = Traits::max_vertex_uniform_vectors(input);

      fragment->max_viewport_width = Traits::max_viewport_width(input);

      fragment->max_viewport_height = Traits::max_viewport_height(input);

      fragment->num_compressed_texture_formats = Traits::num_compressed_texture_formats(input);

      fragment->num_shader_binary_formats = Traits::num_shader_binary_formats(input);

      fragment->max_3d_texture_size = Traits::max_3d_texture_size(input);

      fragment->max_array_texture_layers = Traits::max_array_texture_layers(input);

      fragment->max_color_attachments = Traits::max_color_attachments(input);

      fragment->max_combined_fragment_uniform_components = Traits::max_combined_fragment_uniform_components(input);

      fragment->max_combined_uniform_blocks = Traits::max_combined_uniform_blocks(input);

      fragment->max_combined_vertex_uniform_components = Traits::max_combined_vertex_uniform_components(input);

      fragment->max_draw_buffers = Traits::max_draw_buffers(input);

      fragment->max_element_index = Traits::max_element_index(input);

      fragment->max_elements_indices = Traits::max_elements_indices(input);

      fragment->max_elements_vertices = Traits::max_elements_vertices(input);

      fragment->max_fragment_input_components = Traits::max_fragment_input_components(input);

      fragment->max_fragment_uniform_blocks = Traits::max_fragment_uniform_blocks(input);

      fragment->max_fragment_uniform_components = Traits::max_fragment_uniform_components(input);

      fragment->max_program_texel_offset = Traits::max_program_texel_offset(input);

      fragment->max_samples = Traits::max_samples(input);

      fragment->max_server_wait_timeout = Traits::max_server_wait_timeout(input);

      fragment->max_texture_lod_bias = Traits::max_texture_lod_bias(input);

      fragment->max_transform_feedback_interleaved_components = Traits::max_transform_feedback_interleaved_components(input);

      fragment->max_transform_feedback_separate_attribs = Traits::max_transform_feedback_separate_attribs(input);

      fragment->max_transform_feedback_separate_components = Traits::max_transform_feedback_separate_components(input);

      fragment->max_uniform_block_size = Traits::max_uniform_block_size(input);

      fragment->max_uniform_buffer_bindings = Traits::max_uniform_buffer_bindings(input);

      fragment->max_varying_components = Traits::max_varying_components(input);

      fragment->max_vertex_output_components = Traits::max_vertex_output_components(input);

      fragment->max_vertex_uniform_blocks = Traits::max_vertex_uniform_blocks(input);

      fragment->max_vertex_uniform_components = Traits::max_vertex_uniform_components(input);

      fragment->min_program_texel_offset = Traits::min_program_texel_offset(input);

      fragment->num_program_binary_formats = Traits::num_program_binary_formats(input);

      fragment->uniform_buffer_offset_alignment = Traits::uniform_buffer_offset_alignment(input);

      fragment->occlusion_query_boolean = Traits::occlusion_query_boolean(input);

      fragment->timer_queries = Traits::timer_queries(input);

      fragment->max_texture_size = Traits::max_texture_size(input);

      fragment->sync_query = Traits::sync_query(input);
  }
};

}  // namespace mojo::internal

#endif  // GPU_IPC_COMMON_CAPABILITIES_MOJOM_SEND_VALIDATION_H_