Vulkan Programming Guide: The Official Guide to Learning Vulkan (Paperback)

Graham Sellers, John Kessenich




Authoritative, trusted, and comprehensive coverage, straight from two of Vulkan's development team leads
Covers both the new portable Vulkan API and SPIR-V shading language
Enables developers to gain direct control over GPU acceleration for maximum performance and predictability
Helps developers create a wide spectrum of 3D applications, and solve challenging compute problems in science and engineering
Contains extensive new code examples throughout


The Definitive Vulkan™ Developer’s Guide and Reference: Master the Next-Generation Specification for Cross-Platform Graphics

The next generation of the OpenGL specification, Vulkan, has been redesigned from the ground up, giving applications direct control over GPU acceleration for unprecedented performance and predictability. Vulkan™ Programming Guide is the essential, authoritative reference to this new standard for experienced graphics programmers in all Vulkan environments.

Vulkan API lead Graham Sellers (with contributions from language lead John Kessenich) presents example-rich introductions to the portable Vulkan API and the new SPIR-V shading language. The author introduces Vulkan, its goals, and the key concepts framing its API, and presents a complex rendering system that demonstrates both Vulkan’s uniqueness and its exceptional power.

You’ll find authoritative coverage of topics ranging from drawing to memory, and threading to compute shaders. The author especially shows how to handle tasks such as synchronization, scheduling, and memory management that are now the developer’s responsibility.

Vulkan™ Programming Guide introduces powerful 3D development techniques for fields ranging from video games to medical imaging, and state-of-the-art approaches to solving challenging scientific compute problems. Whether you’re upgrading from OpenGL or moving to open-standard graphics APIs for the first time, this guide will help you get the results and performance you’re looking for.

Coverage includes

Extensively tested code examples to demonstrate Vulkan’s capabilities and show how it differs from OpenGL
Expert guidance on getting started and working with Vulkan’s new memory system
Thorough discussion of queues, commands, moving data, and presentation
Full explanations of the SPIR-V binary shading language and compute/graphics pipelines
Detailed discussions of drawing commands, geometry and fragment processing, synchronization primitives, and reading Vulkan data into applications
A complete case study application: deferred rendering using complex multi-pass architecture and multiple processing queues
Appendixes presenting Vulkan functions and SPIR-V opcodes, as well as a complete Vulkan glossary

<Sample Content>

Table of Contents

Figures xiii

Tables xv

Listings xvii

About This Book xxi

Acknowledgments xxvii

About the Author xxix

Chapter 1: Overview of Vulkan 1

Introduction 2

Instances, Devices, and Queues 3

Object Types and Function Conventions 18

Managing Memory 19

Multithreading in Vulkan 20

Mathematical Concepts 21

Enhancing Vulkan 23

Shutting Down Cleanly 31

Summary 33

Chapter 2: Memory and Resources 35

Host Memory Management 36

Resources 41

Device Memory Management 73

Summary 93

Chapter 3: Queues and Commands 95

Device Queues 96

Creating Command Buffers 97

Recording Commands 101

Recycling Command Buffers 105

Submission of Commands 107

Summary 109

Chapter 4: Moving Data 111

Managing Resource State 112

Clearing and Filling Buffers 123

Clearing and Filling Images 125

Copying Image Data 128

Copying Compressed Image Data 132

Stretching Images 133

Summary 135

Chapter 5: Presentation 137

Presentation Extension 138

Presentation Surfaces 138

Swap Chains 143

Full-Screen Surfaces 152

Performing Presentation 159

Cleaning Up 162

Summary 163

Chapter 6: Shaders and Pipelines 165

An Overview of GLSL 166

An Overview of SPIR-V 169

Pipelines 175

Executing Work 186

Resource Access in Shaders 188

Summary 224

Chapter 7: Graphics Pipelines 225

The Logical Graphics Pipeline 226

Renderpasses 230

The Framebuffer 237

Creating a Simple Graphics Pipeline 240

Dynamic State 264

Summary 266

Chapter 8: Drawing 267

Getting Ready to Draw 268

Vertex Data 271

Indexed Draws 272

Instancing 280

Indirect Draws 281

Summary 286

Chapter 9: Geometry Processing 287

Tessellation 288

Geometry Shaders 309

Programmable Point Size 319

Line Width and Rasterization 321

User Clipping and Culling 324

The Viewport Transformation 331

Summary 335

Chapter 10: Fragment Processing 337

Scissor Testing 338

Depth and Stencil Operations 340

Multisample Rendering 350

Logic Operations 357

Fragment Shader Outputs 358

Color Blending 362

Summary 366

Chapter 11: Synchronization 367

Fences 368

Events 376

Semaphores 381

Summary 384

Chapter 12: Getting Data Back 387

Queries 388

Reading Data with the Host 398

Summary 400

Chapter 13: Multipass Rendering 401

Input Attachments 402

Attachment Contents 408

Secondary Command Buffers 420

Summary 423

Appendix: Vulkan Functions 425

Glossary 429

Index 443