// Copyright 2015-2021 The Khronos Group, Inc.
//
// SPDX-License-Identifier: CC-BY-4.0

[appendix]
[[credits]]
= Credits (Informative)

Vulkan 1.2 is the result of contributions from many people and companies
participating in the Khronos Vulkan Working Group, as well as input from the
Vulkan Advisory Panel.

Members of the Working Group, including the company that they represented at
the time of their most recent contribution, are listed in the following
section.
Some specific contributions made by individuals are listed together with
their name.


== Working Group Contributors to Vulkan

  * Aaron Greig, Codeplay Software Ltd.
    (version 1.1)
  * Aaron Hagan, AMD (version 1.1)
  * Adam Jackson, Red Hat (versions 1.0, 1.1)
  * Adam Śmigielski, Mobica (version 1.0)
  * Aidan Fabius, Core Avionics & Industrial Inc.
    (version 1.2)
  * Alan Baker, Google (versions 1.1, 1.2)
  * Alan Ward, Google (versions 1.1, 1.2)
  * Alejandro Piñeiro, Igalia (version 1.1)
  * Alex Bourd, Qualcomm Technologies, Inc.
    (versions 1.0, 1.1)
  * Alex Crabb, Caster Communications (version 1.2)
  * Alex Walters, Imagination Technologies (version 1.2)
  * Alexander Galazin, Arm (versions 1.0, 1.1, 1.2)
  * Allen Hux, Intel (version 1.0)
  * Alon Or-bach, Samsung Electronics (versions 1.0, 1.1, 1.2) (WSI
    technical sub-group chair)
  * Anastasia Stulova, Arm (version 1.2)
  * Andreas Vasilakis, Think Silicon (version 1.2)
  * Andres Gomez, Igalia (version 1.1)
  * Andrew Cox, Samsung Electronics (version 1.0)
  * Andrew Garrard, Samsung Electronics (versions 1.0, 1.1, 1.2) (format
    wrangler)
  * Andrew Poole, Samsung Electronics (version 1.0)
  * Andrew Rafter, Samsung Electronics (version 1.0)
  * Andrew Richards, Codeplay Software Ltd.
    (version 1.0)
  * Andrew Woloszyn, Google (versions 1.0, 1.1)
  * Ann Thorsnes, Khronos (version 1.2)
  * Antoine Labour, Google (versions 1.0, 1.1)
  * Aras Pranckevičius, Unity Technologies (version 1.0)
  * Ashwin Kolhe, NVIDIA (version 1.0)
  * Baldur Karlsson, Independent (versions 1.1, 1.2)
  * Barthold Lichtenbelt, NVIDIA (version 1.1)
  * Bas Nieuwenhuizen, Google (versions 1.1, 1.2)
  * Ben Bowman, Imagination Technologies (version 1.0)
  * Benj Lipchak, Unknown (version 1.0)
  * Bill Hollings, Brenwill (versions 1.0, 1.1, 1.2)
  * Bill Licea-Kane, Qualcomm Technologies, Inc.
    (versions 1.0, 1.1)
  * Blaine Kohl, Khronos (version 1.2)
  * Boris Zanin, Mobica (version 1.2)
  * Brent E. Insko, Intel (version 1.0)
  * Brian Ellis, Qualcomm Technologies, Inc.
    (version 1.0)
  * Brian Paul, VMware (version 1.2)
  * Caio Marcelo de Oliveira Filho, Intel (version 1.2)
  * Cass Everitt, Oculus VR (versions 1.0, 1.1)
  * Cemil Azizoglu, Canonical (version 1.0)
  * Chad Versace, Google (versions 1.0, 1.1, 1.2)
  * Chang-Hyo Yu, Samsung Electronics (version 1.0)
  * Chia-I Wu, LunarG (version 1.0)
  * Chris Frascati, Qualcomm Technologies, Inc.
    (version 1.0)
  * Christophe Riccio, Unity Technologies (versions 1.0, 1.1)
  * Cody Northrop, LunarG (version 1.0)
  * Colin Riley, AMD (version 1.1)
  * Cort Stratton, Google (versions 1.1, 1.2)
  * Courtney Goeltzenleuchter, Google (versions 1.0, 1.1)
  * Craig Davies, Huawei (version 1.2)
  * Dae Kim, Imagination Technologies (version 1.1)
  * Damien Leone, NVIDIA (version 1.0)
  * Dan Baker, Oxide Games (versions 1.0, 1.1)
  * Dan Ginsburg, Valve Software (versions 1.0, 1.1, 1.2)
  * Daniel Johnston, Intel (versions 1.0, 1.1)
  * Daniel Koch, NVIDIA (versions 1.0, 1.1, 1.2)
  * Daniel Rakos, AMD (versions 1.0, 1.1, 1.2)
  * Daniel Stone, Collabora (versions 1.1, 1.2)
  * Daniel Vetter, Intel (version 1.2)
  * David Airlie, Red Hat (versions 1.0, 1.1, 1.2)
  * David Mao, AMD (versions 1.0, 1.2)
  * David Miller, Miller & Mattson (versions 1.0, 1.1) (Vulkan reference
    card)
  * David Neto, Google (versions 1.0, 1.1, 1.2)
  * David Wilkinson, AMD (version 1.2)
  * David Yu, Pixar (version 1.0)
  * Dejan Mircevski, Google (version 1.1)
  * Dominik Witczak, AMD (versions 1.0, 1.1)
  * Donald Scorgie, Imagination Technologies (version 1.2)
  * Dzmitry Malyshau, Mozilla (versions 1.1, 1.2)
  * Ed Hutchins, Oculus (version 1.2)
  * Emily Stearns, Khronos (version 1.2)
  * Frank (LingJun) Chen, Qualcomm Technologies, Inc.
    (version 1.0)
  * Fred Liao, Mediatek (version 1.0)
  * Gabe Dagani, Freescale (version 1.0)
  * Gabor Sines, AMD (version 1.2)
  * Graeme Leese, Broadcom (versions 1.0, 1.1, 1.2)
  * Graham Connor, Imagination Technologies (version 1.0)
  * Graham Sellers, AMD (versions 1.0, 1.1)
  * Greg Fischer, LunarG (version 1.1)
  * Hai Nguyen, Google (version 1.2)
  * Hans-Kristian Arntzen, Arm (versions 1.1, 1.2)
  * Henri Verbeet, Codeweavers (version 1.2)
  * Hwanyong Lee, Kyungpook National University (version 1.0)
  * Iago Toral, Igalia (versions 1.1, 1.2)
  * Ian Elliott, Google (versions 1.0, 1.1, 1.2)
  * Ian Romanick, Intel (versions 1.0, 1.1)
  * James Hughes, Oculus VR (version 1.0)
  * James Jones, NVIDIA (versions 1.0, 1.1, 1.2)
  * James Riordon, Khronos (version 1.2)
  * Jan Hermes, Continental Corporation (versions 1.0, 1.1)
  * Jan-Harald Fredriksen, Arm (versions 1.0, 1.1, 1.2)
  * Jason Ekstrand, Intel (versions 1.0, 1.1, 1.2)
  * Jean-François Roy, Google (versions 1.1, 1.2)
  * Jeff Bolz, NVIDIA (versions 1.0, 1.1, 1.2)
  * Jeff Juliano, NVIDIA (versions 1.0, 1.1, 1.2)
  * Jeff Leger, Qualcomm Technologies, Inc.
    (version 1.1)
  * Jeff Vigil, Samsung Electronics (versions 1.0, 1.1, 1.2)
  * Jens Owen, Google (versions 1.0, 1.1)
  * Jeremy Hayes, LunarG (version 1.0)
  * Jesse Barker, Unity Technologies (versions 1.0, 1.1, 1.2)
  * Jesse Hall, Google (versions 1.0, 1.1, 1.2)
  * Joe Davis, Samsung Electronics (version 1.1)
  * Johannes van Waveren, Oculus VR (versions 1.0, 1.1)
  * John Kessenich, Google (versions 1.0, 1.1, 1.2) (SPIR-V and GLSL for
    Vulkan specification author)
  * John McDonald, Valve Software (versions 1.0, 1.1, 1.2)
  * John Zulauf, LunarG (versions 1.1, 1.2)
  * Jon Ashburn, LunarG (version 1.0)
  * Jon Leech, Independent (versions 1.0, 1.1, 1.2) (XML toolchain,
    normative language, release wrangler)
  * Jonas Gustavsson, Samsung Electronics (versions 1.0, 1.1)
  * Jonas Meyer, Epic Games (version 1.2)
  * Jonathan Hamilton, Imagination Technologies (version 1.0)
  * Jordan Justen, Intel (version 1.1)
  * Jungwoo Kim, Samsung Electronics (versions 1.0, 1.1)
  * Jörg Wagner, Arm (version 1.1)
  * Kalle Raita, Google (version 1.1)
  * Karen Ghavam, LunarG (versions 1.1, 1.2)
  * Karl Schultz, LunarG (versions 1.1, 1.2)
  * Kathleen Mattson, Khronos (versions 1.0, 1.1, 1.2)
  * Kaye Mason, Google (version 1.2)
  * Keith Packard, Valve (version 1.2)
  * Kenneth Benzie, Codeplay Software Ltd.
    (versions 1.0, 1.1)
  * Kenneth Russell, Google (version 1.1)
  * Kerch Holt, NVIDIA (versions 1.0, 1.1)
  * Kevin O'Neil, AMD (version 1.1)
  * Kris Rose, Khronos (version 1.2)
  * Kristian Kristensen, Intel (versions 1.0, 1.1)
  * Krzysztof Iwanicki, Samsung Electronics (version 1.0)
  * Larry Seiler, Intel (version 1.0)
  * Lauri Ilola, Nokia (version 1.1)
  * Lei Zhang, Google (version 1.2)
  * Lenny Komow, LunarG (versions 1.1, 1.2)
  * Lionel Landwerlin, Intel (versions 1.1, 1.2)
  * Liz Maitral, Khronos (version 1.2)
  * Lutz Latta, Lucasfilm (version 1.0)
  * Maciej Jesionowski, AMD (version 1.1)
  * Mais Alnasser, AMD (version 1.1)
  * Marcin Rogucki, Mobica (version 1.1)
  * Maria Rovatsou, Codeplay Software Ltd.
    (version 1.0)
  * Mark Callow, Independent (versions 1.0, 1.1, 1.2)
  * Mark Kilgard, NVIDIA (versions 1.1, 1.2)
  * Mark Lobodzinski, LunarG (versions 1.0, 1.1, 1.2)
  * Mark Young, LunarG (version 1.1)
  * Markus Tavenrath, NVIDIA (version 1.1)
  * Mateusz Przybylski, Intel (version 1.0)
  * Mathias Heyer, NVIDIA (versions 1.0, 1.1)
  * Mathias Schott, NVIDIA (versions 1.0, 1.1)
  * Matt Netsch, Qualcomm Technologies, Inc.
    (version 1.1)
  * Matthäus Chajdas, AMD (versions 1.1, 1.2)
  * Maurice Ribble, Qualcomm Technologies, Inc.
    (versions 1.0, 1.1)
  * Maxim Lukyanov, Samsung Electronics (version 1.0)
  * Michael Lentine, Google (version 1.0)
  * Michael O'Hara, AMD (version 1.1)
  * Michael Phillip, Samsung Electronics (version 1.2)
  * Michael Wong, Codeplay Software Ltd.
    (version 1.1)
  * Michael Worcester, Imagination Technologies (versions 1.0, 1.1)
  * Michal Pietrasiuk, Intel (version 1.0)
  * Mika Isojarvi, Google (versions 1.0, 1.1)
  * Mike Schuchardt, LunarG (versions 1.1, 1.2)
  * Mike Stroyan, LunarG (version 1.0)
  * Mike Weiblen, LunarG (versions 1.1, 1.2)
  * Minyoung Son, Samsung Electronics (version 1.0)
  * Mitch Singer, AMD (versions 1.0, 1.1, 1.2)
  * Mythri Venugopal, Samsung Electronics (version 1.0)
  * Naveen Leekha, Google (version 1.0)
  * Neil Henning, AMD (versions 1.0, 1.1, 1.2)
  * Neil Hickey, Arm (version 1.2)
  * Neil Trevett, NVIDIA (versions 1.0, 1.1, 1.2)
  * Nick Penwarden, Epic Games (version 1.0)
  * Nicolai Hähnle, AMD (version 1.1)
  * Niklas Smedberg, Unity Technologies (version 1.0)
  * Norbert Nopper, Independent (versions 1.0, 1.1)
  * Nuno Subtil, NVIDIA (versions 1.1, 1.2)
  * Pat Brown, NVIDIA (version 1.0)
  * Patrick Cozzi, Independent (version 1.1)
  * Patrick Doane, Blizzard Entertainment (version 1.0)
  * Peter Lohrmann, AMD (versions 1.0, 1.2)
  * Petros Bantolas, Imagination Technologies (version 1.1)
  * Pierre Boudier, NVIDIA (versions 1.0, 1.1, 1.2)
  * Pierre-Loup Griffais, Valve Software (versions 1.0, 1.1, 1.2)
  * Piers Daniell, NVIDIA (versions 1.0, 1.1, 1.2)
  * Piotr Bialecki, Intel (version 1.0)
  * Prabindh Sundareson, Samsung Electronics (version 1.0)
  * Pyry Haulos, Google (versions 1.0, 1.1) (Vulkan conformance test
    subcommittee chair)
  * Rajeev Rao, Qualcomm (version 1.2)
  * Ralph Potter, Codeplay Software Ltd.
    (versions 1.1, 1.2)
  * Ray Smith, Arm (versions 1.0, 1.1, 1.2)
  * Richard Huddy, Samsung Electronics (version 1.2)
  * Rob Barris, NVIDIA (version 1.1)
  * Rob Stepinski, Transgaming (version 1.0)
  * Robert Simpson, Qualcomm Technologies, Inc.
    (versions 1.0, 1.1)
  * Rolando Caloca Olivares, Epic Games (versions 1.0, 1.1, 1.2)
  * Roy Ju, Mediatek (version 1.0)
  * Rufus Hamade, Imagination Technologies (version 1.0)
  * Ruihao Zhang, Qualcomm Technologies, Inc.
    (versions 1.1, 1.2)
  * Sean Ellis, Arm (version 1.0)
  * Sean Harmer, KDAB Group (versions 1.0, 1.1)
  * Shannon Woods, Google (versions 1.0, 1.1, 1.2)
  * Slawomir Cygan, Intel (versions 1.0, 1.1)
  * Slawomir Grajewski, Intel (versions 1.0, 1.1)
  * Sorel Bosan, AMD (version 1.1)
  * Spencer Fricke, Samsung Electronics (version 1.2)
  * Stefanus Du Toit, Google (version 1.0)
  * Stephen Huang, Mediatek (version 1.1)
  * Steve Hill, Broadcom (versions 1.0, 1.2)
  * Steve Viggers, Core Avionics & Industrial Inc.
    (versions 1.0, 1.2)
  * Stuart Smith, Imagination Technologies (versions 1.0, 1.1, 1.2)
  * Tilmann Scheller, Samsung Electronics (version 1.1)
  * Tim Foley, Intel (version 1.0)
  * Timo Suoranta, AMD (version 1.0)
  * Timothy Lottes, AMD (versions 1.0, 1.1)
  * Tobias Hector, AMD (versions 1.0, 1.1, 1.2) (validity language and
    toolchain)
  * Tobin Ehlis, LunarG (version 1.0)
  * Tom Olson, Arm (versions 1.0, 1.1, 1.2) (Working Group chair)
  * Tomasz Bednarz, Independent (version 1.1)
  * Tomasz Kubale, Intel (version 1.0)
  * Tony Barbour, LunarG (versions 1.0, 1.1, 1.2)
  * Victor Eruhimov, Unknown (version 1.1)
  * Vincent Hindriksen, StreamHPC (version 1.2)
  * Wayne Lister, Imagination Technologies (version 1.0)
  * Wolfgang Engel, Unknown (version 1.1)
  * Yanjun Zhang, VeriSilicon (versions 1.0, 1.1, 1.2)


== Other Credits

The Vulkan Advisory Panel members provided important real-world usage
information and advice that helped guide design decisions.

The wider Vulkan community have provided useful feedback, questions and
specification changes that have helped improve the quality of the
Specification via
link:https://github.com/KhronosGroup/Vulkan-Docs/graphs/contributors[GitHub].

Administrative support to the Working Group for Vulkan 1.1 and 1.2 was
provided by Khronos staff including Angela Cheng, Ann Thorsnes, Blaine Kohl,
Dominic Agoro-Ombaka, Emily Stearns, Jeff Phillips, Lisie Aartsen, and Liz
Maitral; and by Alex Crabb of Caster Communications.

Administrative support for Vulkan 1.0 was provided by Andrew Riegel,
Elizabeth Riegel, Glenn Fredericks, Kathleen Mattson and Michelle Clark of
Gold Standard Group.

Technical support was provided by James Riordon, webmaster of Khronos.org
and OpenGL.org.

