gapid

module
v0.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 3, 2017 License: Apache-2.0

README

GAPID: Graphics API Debugger

GoDoc Gitter LinuxLinux Build Status MacOSMacOS Build Status WindowsWindows Build Status

GAPID is a collection of tools that allows you to inspect, tweak and replay calls from an application to a graphics driver.

GAPID can trace any Android debuggable application, or if you have root access to the device any application can be traced. GAPID can also trace any Desktop Vulkan application.

Screenshot 1 Screenshot 2
Screenshot 3 Screenshot 4

Status

GAPID is still in development but already can be used to debug many Android OpenGL ES and Vulkan applications.

The UI runs on Windows, Linux and MacOS and can currently be used to trace GLES on Android as well as Vulkan on Windows, Linux and Android. We also plan to be able to trace OpenGL ES applications on hosts that support the API.

Downloadable prebuilts will be available once the project reaches the beta milestone.

Detailed current status for Vulkan can be found here.

Building

See Building GAPID.

Running the client

Windows MacOS / Linux
cd %GOPATH%\src\github.com\google\gapid
do run gapic
cd $GOPATH/src/github.com/google/gapid
./do run gapic

Overview

GAPID consists of the following sub-components:

gapii: Graphics API Interceptor

A layer that sits between the application / game and the GPU driver, recording all the calls and memory accesses.

gapis: Graphics API Server

A process that analyses capture streams reporting incorrect API usage, processes the data for replay on various target devices, and provides an RPC interface to the client.

gapir: Graphics API Replay daemon

A stack-based VM used to playback capture files, imitating the original application’s / game's calls to the GPU driver. Supports read-back of any buffer / framebuffer, and provides profiling functionality.

gapic: Graphics API Client

The frontend user interface application. Provides visual inspection of the capture data, memory, resources, and frame-buffer content.

gapil: Graphics API Language

A new domain specific language to describe a graphics API in its entirety. Combined with our template system to generate huge parts of the interceptor, server and replay systems.

components

The GAPII, GAPIS, GAPIR and GAPIC components can all run on different (or the same) device, allowing for distrubuted workflows.

Directories

Path Synopsis
cmd
apic
Package format registers and implements the "format" apic command.
Package format registers and implements the "format" apic command.
do
The do command wraps CMake, simplifying the building GAPID in common configurations.
The do command wraps CMake, simplifying the building GAPID in common configurations.
embed
The embed command is used to embed text files into Go executables as strings.
The embed command is used to embed text files into Go executables as strings.
lingo
The syntax command is used to rewrite recursive descent parser syntax declaration files.
The syntax command is used to rewrite recursive descent parser syntax declaration files.
make-debuggable
Command make-debuggable takes an apk and makes it debuggable, saving it to a different path.
Command make-debuggable takes an apk and makes it debuggable, saving it to a different path.
shadertool
The shadertool command modifies shader source code.
The shadertool command modifies shader source code.
core
app
Package app provides an opinionated common infrastructure to application structure.
Package app provides an opinionated common infrastructure to application structure.
app/auth
Package auth provides simple token based, stream authorization functions.
Package auth provides simple token based, stream authorization functions.
app/benchmark
Package benchmark provides benchmarking facilities to the standard application system.
Package benchmark provides benchmarking facilities to the standard application system.
app/flags
Package flag provides extended support for flag parsing.
Package flag provides extended support for flag parsing.
app/layout
Package layout is used to find parts of the application package to load or run.
Package layout is used to find parts of the application package to load or run.
context/keys
Package keys holds code for managing the set of common keys in a context.
Package keys holds code for managing the set of common keys in a context.
data/compare
Package compare has utilities for comparing values.
Package compare has utilities for comparing values.
data/deep
Package deep provides reflection based methods for copying and cloning structs.
Package deep provides reflection based methods for copying and cloning structs.
data/endian
Package endian implements binary.Reader and binary.Writer for reading / writing simple primivite types from a binary source.
Package endian implements binary.Reader and binary.Writer for reading / writing simple primivite types from a binary source.
data/id
Package id provides types and functions for generation of identifiers.
Package id provides types and functions for generation of identifiers.
data/pack
Package pack provides methods to deal with self describing files of proto data.
Package pack provides methods to deal with self describing files of proto data.
data/pod
Package pod provides types and functions for dealing with simple structured objects.
Package pod provides types and functions for dealing with simple structured objects.
data/protoconv
Package protoconv provides a mechanism to register functions to convert objects to and from proto messages.
Package protoconv provides a mechanism to register functions to convert objects to and from proto messages.
data/protoutil
Package protoutil adds some helpers that makes using protobuf structures a little easier.
Package protoutil adds some helpers that makes using protobuf structures a little easier.
data/protoutil/testprotos
Package testprotos provides some proto messages that can be used for tests.
Package testprotos provides some proto messages that can be used for tests.
data/slice
Package slice provides utilities for mutating generic slices.
Package slice provides utilities for mutating generic slices.
event
Package event is a library to support event producers and handlers.
Package event is a library to support event producers and handlers.
event/task
Package task contains types that can be used to create cancelable tasks.
Package task contains types that can be used to create cancelable tasks.
fault
Package fault holds common error handling types, code and values.
Package fault holds common error handling types, code and values.
fault/stacktrace
Package stacktrace has functionality for capturing and printing stack traces.
Package stacktrace has functionality for capturing and printing stack traces.
git
Package git provides handling for the git source control system.
Package git provides handling for the git source control system.
image
Package image provides functions for converting between various image formats.
Package image provides functions for converting between various image formats.
image/astc
Package astc implements ASTC texture decompression.
Package astc implements ASTC texture decompression.
java/jdbg
Package jdbg provides a simpler interface to the jdwp package, offering simple type resolving and method invoking functions.
Package jdbg provides a simpler interface to the jdwp package, offering simple type resolving and method invoking functions.
java/jdwp
Package jdwp implements types to communicate using the the Java Debug Wire Protocol.
Package jdwp implements types to communicate using the the Java Debug Wire Protocol.
langsvr
Package langsvr provides a simple interface to implement a language server.
Package langsvr provides a simple interface to implement a language server.
langsvr/protocol
Package protocol implements the language server protocol.
Package protocol implements the language server protocol.
log
math/f16
Package f16 is a basic math library for 16 bit floating point numbers.
Package f16 is a basic math library for 16 bit floating point numbers.
math/f32
Package f32 is a basic math library for float32.
Package f32 is a basic math library for float32.
math/f64
Package f64 is a basic math library for float64.
Package f64 is a basic math library for float64.
math/interval
Package interval implements algorithms that operate on lists of intervals.
Package interval implements algorithms that operate on lists of intervals.
math/sint
Package sint is a basic math library for int.
Package sint is a basic math library for int.
math/u32
Package u32 is a basic math library for uint32.
Package u32 is a basic math library for uint32.
math/u64
Package u64 is a basic math library for uint64.
Package u64 is a basic math library for uint64.
net/grpcutil
Package grpcutil adds some helpers that make writing grpc servers and clients a little easier.
Package grpcutil adds some helpers that make writing grpc servers and clients a little easier.
os/android
Package android contains support for dealing with android devices.
Package android contains support for dealing with android devices.
os/android/adb
Package adb provides an interface to the Android Debug Bridge.
Package adb provides an interface to the Android Debug Bridge.
os/android/apk
Package apk provides methods to get information (e.g.
Package apk provides methods to get information (e.g.
os/android/binaryxml
Package binaryxml is a package for dealing with the binary format of the android manifest.
Package binaryxml is a package for dealing with the binary format of the android manifest.
os/android/manifest
Package manifest supports reading and changing the android manifest xml file.
Package manifest supports reading and changing the android manifest xml file.
os/device
Package device contains code for describing both the software and hardware of computing devices.
Package device contains code for describing both the software and hardware of computing devices.
os/device/bind
Package bind contains code for binding to and controlling devices.
Package bind contains code for binding to and controlling devices.
os/file
Package file is a package for dealing with strongly typed paths and files in an OS agnostic manner.
Package file is a package for dealing with strongly typed paths and files in an OS agnostic manner.
os/process
Package process has helper code for managing server processes and connections to them.
Package process has helper code for managing server processes and connections to them.
os/shell
Package shell provides facilities for executing commands on various targets.
Package shell provides facilities for executing commands on various targets.
os/shell/stub
Package stub has implementations of the shell package intended for use in tests where launching an external process is undesirable.
Package stub has implementations of the shell package intended for use in tests where launching an external process is undesirable.
stream
Package stream contains types that fully describe streams of data.
Package stream contains types that fully describe streams of data.
stream/fmts
Package fmts contains a number of standard stream formats.
Package fmts contains a number of standard stream formats.
text
Package text provides common text handling capabilities.
Package text provides common text handling capabilities.
text/parse
Package parse provides support functionality for writing scannerless parsers.
Package parse provides support functionality for writing scannerless parsers.
text/reflow
Package reflow supports rewriting the whitespace in a stream of runes.
Package reflow supports rewriting the whitespace in a stream of runes.
video
Package video contains go-wrappers around the 'avconv' and 'ffmpeg' executables for generating videos from images.
Package video contains go-wrappers around the 'avconv' and 'ffmpeg' executables for generating videos from images.
vulkan/loader
Package loader contains utilities for setting up the Vulkan loader.
Package loader contains utilities for setting up the Vulkan loader.
Package gapidapk holds functions relating to the GAPID Android APK.
Package gapidapk holds functions relating to the GAPID Android APK.
pkginfo
Package pkginfo contains support for dealing with package manager information.
Package pkginfo contains support for dealing with package manager information.
gapii
client
Package client provides functions for launching and communicating with the gapii tracer.
Package client provides functions for launching and communicating with the gapii tracer.
Package gapil holds the main interface to the api language libraries.
Package gapil holds the main interface to the api language libraries.
analysis
Package analysis performs static program data flow analysis of an API file.
Package analysis performs static program data flow analysis of an API file.
ast
Package ast holds the set of types used in the abstract syntax tree representation of the api language.
Package ast holds the set of types used in the abstract syntax tree representation of the api language.
constset
Package constset provides structures for storing large numbers of value-string pairs efficently.
Package constset provides structures for storing large numbers of value-string pairs efficently.
format
Package format registers and implements the "format" apic command.
Package format registers and implements the "format" apic command.
langsvr
The langsvr command implements a language server for the graphics API language.
The langsvr command implements a language server for the graphics API language.
parser
Package parser implements a parser for converting the api language into abstract syntax trees.
Package parser implements a parser for converting the api language into abstract syntax trees.
resolver
Package resolver implements a semantic resolving for the api language.
Package resolver implements a semantic resolving for the api language.
semantic
Package semantic holds the set of types used in the abstract semantic graph representation of the api language.
Package semantic holds the set of types used in the abstract semantic graph representation of the api language.
semantic/printer
Package printer provides a human-readable printer for the semantic tree nodes.
Package printer provides a human-readable printer for the semantic tree nodes.
validate
Package validate registers and implements the "validate" apic command.
Package validate registers and implements the "validate" apic command.
gapir
client
Package client provides helper methods and types for communicating with the GAPIR service.
Package client provides helper methods and types for communicating with the GAPIR service.
gapis
api
Package api exposes the shared behavior of all graphics api's.
Package api exposes the shared behavior of all graphics api's.
api/all
Package all is used to import all known api APIs for their side effects.
Package all is used to import all known api APIs for their side effects.
api/core/core_pb
Package core_pb contains legacy protos which will be removed soon.
Package core_pb contains legacy protos which will be removed soon.
api/gles
Package gles implementes the API interface for the OpenGL ES graphics library.
Package gles implementes the API interface for the OpenGL ES graphics library.
api/gles/gles_pb
Package gles_pb describes the serialization format for the gles api.
Package gles_pb describes the serialization format for the gles api.
api/gles/glsl
Package glsl contains routines for manipulation of OpenGL ES Shading Language programs.
Package glsl contains routines for manipulation of OpenGL ES Shading Language programs.
api/gles/glsl/ast
Package ast defines the abstract syntax tree of OpenGL ES Shading Language programs.
Package ast defines the abstract syntax tree of OpenGL ES Shading Language programs.
api/gles/glsl/builtins
Package builtins contains the definitions of all OpenGL ES Shading Language builtin functions.
Package builtins contains the definitions of all OpenGL ES Shading Language builtin functions.
api/gles/glsl/evaluator
Package evaluator is responsible for evaluating expressions in OpenGL ES Shading Language programs.
Package evaluator is responsible for evaluating expressions in OpenGL ES Shading Language programs.
api/gles/glsl/parser
Package parser implements parsing and serializing an OpenGL ES Shading Language programs.
Package parser implements parsing and serializing an OpenGL ES Shading Language programs.
api/gles/glsl/preprocessor
Package preprocessor defines the preprocessor for the OpenGL ES Shading Language.
Package preprocessor defines the preprocessor for the OpenGL ES Shading Language.
api/gles/glsl/sema
Package sema performs semantic checking of OpenGL ES Shading Language programs.
Package sema performs semantic checking of OpenGL ES Shading Language programs.
api/sync
Package sync provides interfaces for managing externally synchronized APIs.
Package sync provides interfaces for managing externally synchronized APIs.
api/test
Package test is the integration test suite for the api compiler and templates.
Package test is the integration test suite for the api compiler and templates.
api/test/test_pb
Package test_pb describes the serialization format for the test api.
Package test_pb describes the serialization format for the test api.
api/testcmd
Package testcmd provides fake commands used for testing.
Package testcmd provides fake commands used for testing.
api/testcmd/test_pb
Package test_pb describes the serialization format for the test api.
Package test_pb describes the serialization format for the test api.
api/transform
Package transform provides transforms on commands.
Package transform provides transforms on commands.
api/vulkan
Package vulkan implementes the API interface for the Vulkan graphics library.
Package vulkan implementes the API interface for the Vulkan graphics library.
api/vulkan/vulkan_pb
Package vulkan_pb describes the serialization format for the vulkan api.
Package vulkan_pb describes the serialization format for the vulkan api.
atom
Package atom is deprecated.
Package atom is deprecated.
atom/atom_pb
Package atom_pb describes the serialization format for general atom information.
Package atom_pb describes the serialization format for general atom information.
capture
Package capture contains all the core GAPIS functionality for dealing with loaded captures.
Package capture contains all the core GAPIS functionality for dealing with loaded captures.
client
Package client provides helper methods and types for communicating with the GAPIS service.
Package client provides helper methods and types for communicating with the GAPIS service.
config
Package config contains a list of build configuration flags.
Package config contains a list of build configuration flags.
database
Package database implements the persistence layer for the gpu debugger tools.
Package database implements the persistence layer for the gpu debugger tools.
memory
Package memory contains types used for representing and simulating memory observed in the capture.
Package memory contains types used for representing and simulating memory observed in the capture.
memory/memory_pb
Package memory_pb describes the serialization format for the memory package.
Package memory_pb describes the serialization format for the memory package.
messages
Package messages holds the set of translated gapis user visible strings.
Package messages holds the set of translated gapis user visible strings.
replay
Package replay is used to issue replay requests to replay devices.
Package replay is used to issue replay requests to replay devices.
replay/asm
Package asm contains high-level instructions to control the replay virtual machine.
Package asm contains high-level instructions to control the replay virtual machine.
replay/builder
Package builder contains the Builder type to build replay payloads.
Package builder contains the Builder type to build replay payloads.
replay/devices
Package devices contains functions for gathering devices that can replay a capture.
Package devices contains functions for gathering devices that can replay a capture.
replay/executor
Package executor contains the Execute function for sending a replay to a device.
Package executor contains the Execute function for sending a replay to a device.
replay/opcode
Package opcode holds all the opcodes that are to be interpreted by the replay virtual machine.
Package opcode holds all the opcodes that are to be interpreted by the replay virtual machine.
replay/protocol
Package protocol contains the constants and types used to communicate with the replay system and its virtual-machine interpreter.
Package protocol contains the constants and types used to communicate with the replay system and its virtual-machine interpreter.
replay/value
Package value contains the value types used by the replay virtual machine.
Package value contains the value types used by the replay virtual machine.
resolve
Package resolve exposes functions for performing complex data queries.
Package resolve exposes functions for performing complex data queries.
server
Package server implements the rpc gpu debugger service, queriable by the clients, along with some helpers exposed via an http listener.
Package server implements the rpc gpu debugger service, queriable by the clients, along with some helpers exposed via an http listener.
service
Package service is the definition of the RPC GPU debugger service exposed by the server.
Package service is the definition of the RPC GPU debugger service exposed by the server.
service/path
Package path contains types that represent data references.
Package path contains types that represent data references.
shadertools
Package shadertools wraps around external C code for manipulating shaders.
Package shadertools wraps around external C code for manipulating shaders.
stringtable/minidown
Package minidown is a minimal-feature subset of the markdown language.
Package minidown is a minimal-feature subset of the markdown language.
stringtable/minidown/node
Package node holds the syntax tree nodes for a parse minidown document.
Package node holds the syntax tree nodes for a parse minidown document.
stringtable/minidown/parser
Package parser implements the minidown parser.
Package parser implements the minidown parser.
stringtable/minidown/scanner
Package scanner implements the minidown token scanner.
Package scanner implements the minidown token scanner.
stringtable/minidown/token
Package token holds the tokens generated my the minidown scanner.
Package token holds the tokens generated my the minidown scanner.
test
integration/replay
Package replay contains the integration tests with the replay system.
Package replay contains the integration tests with the replay system.
integration/replay/gles
Package gles contains the OpenGL ES integration tests with the replay system.
Package gles contains the OpenGL ES integration tests with the replay system.
integration/replay/gles/samples
Package samples exposes functions for building simple GLES command streams.
Package samples exposes functions for building simple GLES command streams.
integration/service
Package service provides GAPIS service integration tests.
Package service provides GAPIS service integration tests.
robot/build
Package build holds build package and artifact managment for robot.
Package build holds build package and artifact managment for robot.
robot/job
Package job holds code for managing task execution in robot.
Package job holds code for managing task execution in robot.
robot/job/worker
Package worker is a set of helpers for implementing common features of robot workers (see package job for more information about what a worker is).
Package worker is a set of helpers for implementing common features of robot workers (see package job for more information about what a worker is).
robot/lingo/generator
Package generator provides the functionality used by the lingo command to add generated parser functionality based on syntactically correct go code.
Package generator provides the functionality used by the lingo command to add generated parser functionality based on syntactically correct go code.
robot/master
Package master holds the code for a master in the robot system.
Package master holds the code for a master in the robot system.
robot/monitor
Package monitor is a helper for keeping a local in memory representation of the key data from some of the robot services.
Package monitor is a helper for keeping a local in memory representation of the key data from some of the robot services.
robot/record
Package record provides funcitonality for sequential storage of types in a variety of serialization formats.
Package record provides funcitonality for sequential storage of types in a variety of serialization formats.
robot/replay
Package replay holds the functionality used to do device replay and comparison video generation for robot.
Package replay holds the functionality used to do device replay and comparison video generation for robot.
robot/report
Package report holds the functionality for running trace reports and verifying correctness of a trace in the robot system.
Package report holds the functionality for running trace reports and verifying correctness of a trace in the robot system.
robot/scheduler
Package scheduler holds the main task scheculing for the robot system.
Package scheduler holds the main task scheculing for the robot system.
robot/search
Package search holds the structures needed to support a generalised query structure suitable for rpc's to a search service.
Package search holds the structures needed to support a generalised query structure suitable for rpc's to a search service.
robot/search/eval
Package eval supplies logic for automatically applying a search query to a set of records.
Package eval supplies logic for automatically applying a search query to a set of records.
robot/search/query
Package query contains helpful code for building structured search queries.
Package query contains helpful code for building structured search queries.
robot/search/script
Package script provides a fairly terse programming language for expressing search queries as strings.
Package script provides a fairly terse programming language for expressing search queries as strings.
robot/stash
Package stash provides the defenition of a service that stores immutable blobs of data keyed by id, and the client helpers for dealing with that service.
Package stash provides the defenition of a service that stores immutable blobs of data keyed by id, and the client helpers for dealing with that service.
robot/stash/grpc
Package grpc provides the client and server support for communicating with a remote stash using grpc.
Package grpc provides the client and server support for communicating with a remote stash using grpc.
robot/stash/local
Package local provides implementations of a stash.Service for local storage.
Package local provides implementations of a stash.Service for local storage.
robot/subject
Package subject holds the code for handling tracable applications in the robot system.
Package subject holds the code for handling tracable applications in the robot system.
robot/trace
Package trace holds the code for taking a capture in the robot system.
Package trace holds the code for taking a capture in the robot system.
robot/web
Package web holds the code for serving the robot web interface.
Package web holds the code for serving the robot web interface.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL