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

// Copyright 2016 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_SHARED_INTERNAL_H_
#define GPU_IPC_COMMON_CAPABILITIES_MOJOM_SHARED_INTERNAL_H_
#include "mojo/public/cpp/bindings/lib/array_internal.h"
#include "mojo/public/cpp/bindings/lib/bindings_internal.h"
#include "mojo/public/cpp/bindings/lib/map_data_internal.h"
#include "mojo/public/cpp/bindings/lib/message_fragment.h"
#include "services/viz/public/mojom/compositing/shared_image_format.mojom-shared-internal.h"
#include "mojo/public/cpp/bindings/lib/native_enum_data.h"
#include "mojo/public/interfaces/bindings/native_struct.mojom-shared-internal.h"
#include "base/component_export.h"



namespace mojo {
namespace internal {
class ValidationContext;
}
}


namespace gpu::mojom {
namespace internal {
class Capabilities_Data;
class ShaderPrecision_Data;
class PerStagePrecisions_Data;
class GLCapabilities_Data;

#pragma pack(push, 1)
class COMPONENT_EXPORT(MOJOM_SHARED_GPU_EXPORT) Capabilities_Data {
 public:
  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  int32_t max_texture_size;
  uint8_t egl_image_external : 1;
  uint8_t texture_format_bgra8888 : 1;
  uint8_t texture_format_etc1_npot : 1;
  uint8_t disable_mac_swangle_rgbx : 1;
  uint8_t sync_query : 1;
  uint8_t texture_rg : 1;
  uint8_t texture_norm16 : 1;
  uint8_t texture_half_float_linear : 1;
  uint8_t image_ar30 : 1;
  uint8_t image_ab30 : 1;
  uint8_t render_buffer_format_bgra8888 : 1;
  uint8_t msaa_is_slow : 1;
  uint8_t avoid_stencil_buffers : 1;
  uint8_t supports_rgb_to_yuv_conversion : 1;
  uint8_t supports_yuv_readback : 1;
  uint8_t mesa_framebuffer_flip_y : 1;
  uint8_t context_supports_distance_field_text : 1;
  uint8_t using_vulkan_context : 1;
  uint8_t use_deferred_graphite_submit : 1;
  uint8_t pad19_[1];
  mojo::internal::Pointer<mojo::internal::Map_Data<uint32_t, mojo::internal::Pointer<mojo::internal::Array_Data<uint64_t>>>> drm_formats_and_modifiers;
  uint64_t drm_device_id;

 private:
  friend class mojo::internal::MessageFragment<Capabilities_Data>;

  Capabilities_Data();
  ~Capabilities_Data() = delete;
};
static_assert(sizeof(Capabilities_Data) == 32,
              "Bad sizeof(Capabilities_Data)");
// Used by Capabilities::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct Capabilities_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  Capabilities_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~Capabilities_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::Message& message) override {
    mojo::internal::MessageFragment<Capabilities_Data> fragment(message);
    mojo::internal::Serialize<DataView>(user_data_, fragment);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    Capabilities_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};
class COMPONENT_EXPORT(MOJOM_SHARED_GPU_EXPORT) ShaderPrecision_Data {
 public:
  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  int32_t min_range;
  int32_t max_range;
  int32_t precision;
  uint8_t padfinal_[4];

 private:
  friend class mojo::internal::MessageFragment<ShaderPrecision_Data>;

  ShaderPrecision_Data();
  ~ShaderPrecision_Data() = delete;
};
static_assert(sizeof(ShaderPrecision_Data) == 24,
              "Bad sizeof(ShaderPrecision_Data)");
// Used by ShaderPrecision::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct ShaderPrecision_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  ShaderPrecision_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~ShaderPrecision_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::Message& message) override {
    mojo::internal::MessageFragment<ShaderPrecision_Data> fragment(message);
    mojo::internal::Serialize<DataView>(user_data_, fragment);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    ShaderPrecision_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};
class COMPONENT_EXPORT(MOJOM_SHARED_GPU_EXPORT) PerStagePrecisions_Data {
 public:
  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  mojo::internal::Pointer<internal::ShaderPrecision_Data> low_int;
  mojo::internal::Pointer<internal::ShaderPrecision_Data> medium_int;
  mojo::internal::Pointer<internal::ShaderPrecision_Data> high_int;
  mojo::internal::Pointer<internal::ShaderPrecision_Data> low_float;
  mojo::internal::Pointer<internal::ShaderPrecision_Data> medium_float;
  mojo::internal::Pointer<internal::ShaderPrecision_Data> high_float;

 private:
  friend class mojo::internal::MessageFragment<PerStagePrecisions_Data>;

  PerStagePrecisions_Data();
  ~PerStagePrecisions_Data() = delete;
};
static_assert(sizeof(PerStagePrecisions_Data) == 56,
              "Bad sizeof(PerStagePrecisions_Data)");
// Used by PerStagePrecisions::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct PerStagePrecisions_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  PerStagePrecisions_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~PerStagePrecisions_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::Message& message) override {
    mojo::internal::MessageFragment<PerStagePrecisions_Data> fragment(message);
    mojo::internal::Serialize<DataView>(user_data_, fragment);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    PerStagePrecisions_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};
class COMPONENT_EXPORT(MOJOM_SHARED_GPU_EXPORT) GLCapabilities_Data {
 public:
  static bool Validate(const void* data,
                       mojo::internal::ValidationContext* validation_context);

  mojo::internal::StructHeader header_;
  mojo::internal::Pointer<internal::PerStagePrecisions_Data> vertex_shader_precisions;
  mojo::internal::Pointer<internal::PerStagePrecisions_Data> fragment_shader_precisions;
  int32_t major_version;
  int32_t minor_version;
  int32_t max_combined_texture_image_units;
  int32_t max_cube_map_texture_size;
  int32_t max_fragment_uniform_vectors;
  int32_t max_renderbuffer_size;
  int32_t max_texture_image_units;
  int32_t max_varying_vectors;
  int32_t max_vertex_attribs;
  int32_t max_vertex_texture_image_units;
  int32_t max_vertex_uniform_vectors;
  int32_t max_viewport_width;
  int32_t max_viewport_height;
  int32_t num_compressed_texture_formats;
  int32_t num_shader_binary_formats;
  int32_t max_3d_texture_size;
  int32_t max_array_texture_layers;
  int32_t max_color_attachments;
  int64_t max_combined_fragment_uniform_components;
  int32_t max_combined_uniform_blocks;
  int32_t max_draw_buffers;
  int64_t max_combined_vertex_uniform_components;
  int64_t max_element_index;
  int32_t max_elements_indices;
  int32_t max_elements_vertices;
  int32_t max_fragment_input_components;
  int32_t max_fragment_uniform_blocks;
  int32_t max_fragment_uniform_components;
  int32_t max_program_texel_offset;
  int32_t max_samples;
  float max_texture_lod_bias;
  int64_t max_server_wait_timeout;
  int32_t max_transform_feedback_interleaved_components;
  int32_t max_transform_feedback_separate_attribs;
  int32_t max_transform_feedback_separate_components;
  int32_t max_uniform_buffer_bindings;
  int64_t max_uniform_block_size;
  int32_t max_varying_components;
  int32_t max_vertex_output_components;
  int32_t max_vertex_uniform_blocks;
  int32_t max_vertex_uniform_components;
  int32_t min_program_texel_offset;
  int32_t num_program_binary_formats;
  int32_t uniform_buffer_offset_alignment;
  uint8_t occlusion_query_boolean : 1;
  uint8_t timer_queries : 1;
  uint8_t sync_query : 1;
  uint8_t pad48_[3];
  int32_t max_texture_size;
  uint8_t padfinal_[4];

 private:
  friend class mojo::internal::MessageFragment<GLCapabilities_Data>;

  GLCapabilities_Data();
  ~GLCapabilities_Data() = delete;
};
static_assert(sizeof(GLCapabilities_Data) == 232,
              "Bad sizeof(GLCapabilities_Data)");
// Used by GLCapabilities::WrapAsMessage to lazily serialize the struct.
template <typename UserType, typename DataView>
struct GLCapabilities_UnserializedMessageContext
    : public mojo::internal::UnserializedMessageContext {
 public:
  static const mojo::internal::UnserializedMessageContext::Tag kMessageTag;

  GLCapabilities_UnserializedMessageContext(
    uint32_t message_name,
    uint32_t message_flags,
    UserType input)
      : mojo::internal::UnserializedMessageContext(&kMessageTag, message_name, message_flags)
      , user_data_(std::move(input)) {}
  ~GLCapabilities_UnserializedMessageContext() override = default;

  UserType TakeData() {
    return std::move(user_data_);
  }

 private:
  // mojo::internal::UnserializedMessageContext:
  void Serialize(mojo::Message& message) override {
    mojo::internal::MessageFragment<GLCapabilities_Data> fragment(message);
    mojo::internal::Serialize<DataView>(user_data_, fragment);
  }

  UserType user_data_;
};

template <typename UserType, typename DataView>
const mojo::internal::UnserializedMessageContext::Tag
    GLCapabilities_UnserializedMessageContext<UserType, DataView>::kMessageTag = {};

#pragma pack(pop)

}  // namespace internal

}  // gpu::mojom

#endif  // GPU_IPC_COMMON_CAPABILITIES_MOJOM_SHARED_INTERNAL_H_