////////////////////////////////////////////////////////////////////////////////
// Do not modify!
// Generated by rpcapi
////////////////////////////////////////////////////////////////////////////////

package service

import (
	"android.googlesource.com/platform/tools/gpu/binary"
	"android.googlesource.com/platform/tools/gpu/log"
)

type RPC interface {
	Import(l log.Logger, name string, Data U8Array) (CaptureId, error)
	GetCaptures(l log.Logger) (CaptureIdArray, error)
	GetDevices(l log.Logger) (DeviceIdArray, error)
	GetState(l log.Logger, capture CaptureId, after uint64) (BinaryId, error)
	GetHierarchy(l log.Logger, capture CaptureId) (HierarchyId, error)
	GetMemoryInfo(l log.Logger, capture CaptureId, after uint64, rng MemoryRange) (MemoryInfoId, error)
	GetFramebufferColor(l log.Logger, device DeviceId, capture CaptureId, api ApiId, after uint64, settings RenderSettings) (ImageInfoId, error)
	GetFramebufferDepth(l log.Logger, device DeviceId, capture CaptureId, api ApiId, after uint64) (ImageInfoId, error)
	GetTimingInfo(l log.Logger, device DeviceId, capture CaptureId, mask TimingMask) (TimingInfoId, error)
	PrerenderFramebuffers(l log.Logger, device DeviceId, capture CaptureId, api ApiId, width uint32, height uint32, atomIds U64Array) (BinaryId, error)
	ReplaceAtom(l log.Logger, capture CaptureId, atomId uint64, atomType uint16, data Binary) (CaptureId, error)
	ResolveAtomStream(l log.Logger, id AtomStreamId) (AtomStream, error)
	ResolveBinary(l log.Logger, id BinaryId) (Binary, error)
	ResolveCapture(l log.Logger, id CaptureId) (Capture, error)
	ResolveDevice(l log.Logger, id DeviceId) (Device, error)
	ResolveHierarchy(l log.Logger, id HierarchyId) (Hierarchy, error)
	ResolveImageInfo(l log.Logger, id ImageInfoId) (ImageInfo, error)
	ResolveMemoryInfo(l log.Logger, id MemoryInfoId) (MemoryInfo, error)
	ResolveSchema(l log.Logger, id SchemaId) (Schema, error)
	ResolveTimingInfo(l log.Logger, id TimingInfoId) (TimingInfo, error)
}

// Handle ApiId
type ApiId struct {
	binary.Generate
	ID binary.ID
}

// Handle AtomStreamId
type AtomStreamId struct {
	binary.Generate
	ID binary.ID
}

// Handle BinaryId
type BinaryId struct {
	binary.Generate
	ID binary.ID
}

// Handle CaptureId
type CaptureId struct {
	binary.Generate
	ID binary.ID
}

// Handle DeviceId
type DeviceId struct {
	binary.Generate
	ID binary.ID
}

// Handle HierarchyId
type HierarchyId struct {
	binary.Generate
	ID binary.ID
}

// Handle ImageInfoId
type ImageInfoId struct {
	binary.Generate
	ID binary.ID
}

// Handle MemoryInfoId
type MemoryInfoId struct {
	binary.Generate
	ID binary.ID
}

// Handle SchemaId
type SchemaId struct {
	binary.Generate
	ID binary.ID
}

// Handle TimingInfoId
type TimingInfoId struct {
	binary.Generate
	ID binary.ID
}

// Array ApiIdˢ
type ApiIdArray []ApiId

// Array ApiSchemaˢ
type ApiSchemaArray []ApiSchema

// Array AtomGroupˢ
type AtomGroupArray []AtomGroup

// Array AtomInfoˢ
type AtomInfoArray []AtomInfo

// Array AtomRangeTimerˢ
type AtomRangeTimerArray []AtomRangeTimer

// Array AtomTimerˢ
type AtomTimerArray []AtomTimer

// Array CaptureIdˢ
type CaptureIdArray []CaptureId

// Array ClassInfoˢ
type ClassInfoArray []ClassInfo

// Array ClassInfoᵖˢ
type ClassInfoPtrArray []*ClassInfo

// Array DeviceIdˢ
type DeviceIdArray []DeviceId

// Array EnumEntryˢ
type EnumEntryArray []EnumEntry

// Array EnumInfoˢ
type EnumInfoArray []EnumInfo

// Array EnumInfoᵖˢ
type EnumInfoPtrArray []*EnumInfo

// Array FieldInfoˢ
type FieldInfoArray []FieldInfo

// Array FieldInfoᵖˢ
type FieldInfoPtrArray []*FieldInfo

// Array MemoryRangeˢ
type MemoryRangeArray []MemoryRange

// Array ParameterInfoˢ
type ParameterInfoArray []ParameterInfo

// Array TypeInfoˢ
type TypeInfoArray []TypeInfo

// Array U64ˢ
type U64Array []uint64

// Array U8ˢ
type U8Array []uint8

// Enum ImageFormat
type ImageFormat int

const (
	ImageFormatRGBA8   ImageFormat = 0
	ImageFormatFloat32 ImageFormat = 1
)

// Enum TimingMask
type TimingMask int

const (
	TimingMaskTimingPerCommand  TimingMask = 1
	TimingMaskTimingPerDrawCall TimingMask = 2
	TimingMaskTimingPerFrame    TimingMask = 4
)

// Enum TypeKind
type TypeKind int

const (
	TypeKindBool        TypeKind = 0
	TypeKindS8          TypeKind = 1
	TypeKindU8          TypeKind = 2
	TypeKindS16         TypeKind = 3
	TypeKindU16         TypeKind = 4
	TypeKindS32         TypeKind = 5
	TypeKindU32         TypeKind = 6
	TypeKindF32         TypeKind = 7
	TypeKindS64         TypeKind = 8
	TypeKindU64         TypeKind = 9
	TypeKindF64         TypeKind = 10
	TypeKindString      TypeKind = 11
	TypeKindEnum        TypeKind = 12
	TypeKindStruct      TypeKind = 14
	TypeKindClass       TypeKind = 15
	TypeKindArray       TypeKind = 16
	TypeKindStaticArray TypeKind = 17
	TypeKindMap         TypeKind = 18
	TypeKindPointer     TypeKind = 19
	TypeKindMemory      TypeKind = 20
	TypeKindAny         TypeKind = 21
	TypeKindID          TypeKind = 22
)

// Interface TypeInfo
type TypeInfo interface {
	binary.Object
	GetName() string
	GetKind() TypeKind
}

// Class Device
type Device struct {
	binary.Generate
	Name                   string
	Model                  string
	OS                     string
	PointerSize            uint8
	PointerAlignment       uint8
	MaxMemorySize          uint64
	RequiresShaderPatching bool
}

// Class Capture
type Capture struct {
	binary.Generate
	Name   string
	Atoms  AtomStreamId
	Apis   ApiIdArray
	Schema SchemaId
}

// Class Binary
type Binary struct {
	binary.Generate
	Data U8Array
}

// Class AtomStream
type AtomStream struct {
	binary.Generate
	Data U8Array
}

// Class Hierarchy
type Hierarchy struct {
	binary.Generate
	Root AtomGroup
}

// Class AtomGroup
type AtomGroup struct {
	binary.Generate
	Name      string
	Range     AtomRange
	SubGroups AtomGroupArray
}

// Class AtomRange
type AtomRange struct {
	binary.Generate
	First uint64
	Count uint64
}

// Class MemoryInfo
type MemoryInfo struct {
	binary.Generate
	Data    U8Array
	Stale   MemoryRangeArray
	Current MemoryRangeArray
	Unknown MemoryRangeArray
}

// Class MemoryRange
type MemoryRange struct {
	binary.Generate
	Base uint64
	Size uint64
}

// Class ImageInfo
type ImageInfo struct {
	binary.Generate
	Format ImageFormat
	Width  uint32
	Height uint32
	Data   BinaryId
}

// Class TimingInfo
type TimingInfo struct {
	binary.Generate
	PerCommand  AtomTimerArray
	PerDrawCall AtomRangeTimerArray
	PerFrame    AtomRangeTimerArray
}

// Class AtomTimer
type AtomTimer struct {
	binary.Generate
	AtomId      uint64
	Nanoseconds uint64
}

// Class AtomRangeTimer
type AtomRangeTimer struct {
	binary.Generate
	FromAtomId  uint64
	ToAtomId    uint64
	Nanoseconds uint64
}

// Class RenderSettings
type RenderSettings struct {
	binary.Generate
	MaxWidth  uint32
	MaxHeight uint32
	Wireframe bool
}

// Class Schema
type Schema struct {
	binary.Generate
	Atoms AtomInfoArray
	Apis  ApiSchemaArray
}

// Class ApiSchema
type ApiSchema struct {
	binary.Generate
	Api   ApiId
	State StructInfo
}

// Class ArrayInfo
type ArrayInfo struct {
	binary.Generate
	Name        string
	Kind        TypeKind
	ElementType TypeInfo
}

// Class StaticArrayInfo
type StaticArrayInfo struct {
	binary.Generate
	Name        string
	Kind        TypeKind
	ElementType TypeInfo
	Size        uint32
}

// Class MapInfo
type MapInfo struct {
	binary.Generate
	Name      string
	Kind      TypeKind
	KeyType   TypeInfo
	ValueType TypeInfo
}

// Class EnumInfo
type EnumInfo struct {
	binary.Generate
	Name    string
	Kind    TypeKind
	Entries EnumEntryArray
	Extends EnumInfoPtrArray
}

// Class EnumEntry
type EnumEntry struct {
	binary.Generate
	Name  string
	Value uint32
}

// Class StructInfo
type StructInfo struct {
	binary.Generate
	Name   string
	Kind   TypeKind
	Fields FieldInfoPtrArray
}

// Class ClassInfo
type ClassInfo struct {
	binary.Generate
	Name    string
	Kind    TypeKind
	Fields  FieldInfoPtrArray
	Extends ClassInfoPtrArray
}

// Class FieldInfo
type FieldInfo struct {
	binary.Generate
	Name string
	Type TypeInfo
}

// Class AtomInfo
type AtomInfo struct {
	binary.Generate
	Api              ApiId
	Type             uint16
	Name             string
	Parameters       ParameterInfoArray
	IsCommand        bool
	IsDrawCall       bool
	IsEndOfFrame     bool
	DocumentationUrl string
}

// Class ParameterInfo
type ParameterInfo struct {
	binary.Generate
	Name string
	Type TypeInfo
	Out  bool
}

// Class SimpleInfo
type SimpleInfo struct {
	binary.Generate
	Name string
	Kind TypeKind
}
