{"id":51859902,"url":"https://github.com/google/amber","last_synced_at":"2026-07-24T05:01:02.651Z","repository":{"id":33266790,"uuid":"157452897","full_name":"google/amber","owner":"google","description":"Amber is a multi-API shader test framework","archived":false,"fork":false,"pushed_at":"2026-06-04T16:24:47.000Z","size":3953,"stargazers_count":228,"open_issues_count":75,"forks_count":73,"subscribers_count":13,"default_branch":"main","last_synced_at":"2026-07-23T15:25:30.090Z","etag":null,"topics":["dawn","testing","vulkan","vulkan-compute-shaders"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-11-13T22:00:36.000Z","updated_at":"2026-07-21T08:59:14.000Z","dependencies_parsed_at":"2024-05-13T15:29:37.352Z","dependency_job_id":"2cd589f8-5734-4334-8d0d-7bdd98935d21","html_url":"https://github.com/google/amber","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/google/amber","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Famber","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Famber/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Famber/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Famber/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/amber/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Famber/sbom","scorecard":{"id":113023,"data":{"date":"2025-08-11","repo":{"name":"github.com/google/amber","commit":"efd0d136303042d4df5487ea9a86b4bccabd1bb1"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6,"checks":[{"name":"Maintained","score":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":9,"reason":"Found 28/30 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/google/.github/SECURITY.md:1","Info: Found linked content: github.com/google/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/google/.github/SECURITY.md:1","Info: Found text in security policy: github.com/google/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-15T15:48:32.969Z","repository_id":33266790,"created_at":"2025-08-15T15:48:32.969Z","updated_at":"2025-08-15T15:48:32.969Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35827727,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-24T02:00:07.870Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dawn","testing","vulkan","vulkan-compute-shaders"],"created_at":"2026-07-24T05:00:52.691Z","updated_at":"2026-07-24T05:01:02.646Z","avatar_url":"https://github.com/google.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Amber\n\nAmber is a multi-API shader test framework.\n\nAmber lets you capture and communicate shader bugs with the fluidity and ease of\na scripting flow:\n\n* No graphics API programming is required.\n  * Supports Vulkan graphics API\n  * WIP: Supports [Dawn][Dawn] graphics API\n* A single text string (or file) maps to a single graphics API pipeline test\n  case. The text includes:\n  * Input data, including buffers and images.\n  * Shaders.\n  * Expectations for the result of running the pipeline.\n* Shaders can be expressed in binary form (as hex), in SPIR-V assembly, or in a\n  higher level shader language.\n* After executing the pipeline, result buffers and images can be saved to output\n  files.\n\nAmber is influenced by [Talvos][Talvos] and [VkRunner][VkRunner].\nThe [VkScript](docs/vk_script.md) syntax matches the format used by VkRunner.\n\nThis is not an officially supported Google product.\n\n## Writing Amber Tests\nWorking with Amber involves writing input test files. Some example files can be\nsee in the [tests/cases](tests/cases) folder.\n\nThe main input format is [Amberscript](docs/amber_script.md). New features are\nadded to AmberScript as Amber is enhanced. This is the preferred format in which\nnew script files are written.\n\n### Clear test as AmberScript\n\n```groovy\nSHADER vertex vtex_shader PASSTHROUGH\nSHADER fragment frag_shader GLSL\n#version 430\n\nlayout(location = 0) in vec4 color_in;\nlayout(location = 0) out vec4 color_out;\n\nvoid main() {\n  color_out = color_in;\n}\nEND\n\nBUFFER img_buf FORMAT B8G8R8A8_UNORM\n\nPIPELINE graphics my_pipeline\n  ATTACH vtex_shader\n  ATTACH frag_shader\n\n  FRAMEBUFFER_SIZE 256 256\n  BIND BUFFER img_buf AS color LOCATION 0\nEND\n\nCLEAR my_pipeline\nEXPECT img_buf IDX 0 0 SIZE 256 256 EQ_RGBA 0 0 0 0\n```\n\nThe [VkScript](docs/vk_script.md) format is supported for historic reasons. It\nis based off, and very closely matches, the format accepted by VkRunner. There\nare no new features being added to VkScript, it is for historical use.\n\n### Clear test as VkScript\n\n```\n[require]\nVK_KHR_get_physical_device_properties2\n\n[vertex shader passthrough]\n\n[fragment shader]\n#version 430\n\nlayout(location = 0) in vec4 color_in;\nlayout(location = 0) out vec4 color_out;\n\nvoid main() {\n  color_out = color_in;\n}\n\n[test]\nclear\nrelative probe rect rgba (0.0, 0.0, 1.0, 1.0) (0, 0, 0, 0)\n```\n\n## Requirements\n\n * Recommended: Configure at least one backend. See [Backends](#backends) below.\n * Git\n * CMake (version 3.7+ enables automatic discovery of an installed Vulkan SDK)\n * Ninja (or other build tool)\n * Python3, for fetching dependencies and building Vulkan wrappers\n\n\n## Building\n```\ngit clone https://github.com/google/amber.git\ncd amber\n./tools/git-sync-deps\nmkdir -p out/Debug\ncd out/Debug\ncmake -GNinja ../..\nninja\n```\n\nAlternatives:\n\n* On Windows, Amber normally statically links against the C runtime library.\n  To override this and link against a shared C runtime, CMake option\n  `-DAMBER_ENABLE_SHARED_CRT`.\n  This will cause Amber to be built with `/MD` for release builds or `/MDd` for\n  debug builds.\n\n### Android\n\n* Android build needs Android SDK 28, Android NDK r25b, Java 8. If you prefer\n  other versions of Android SDK, Android NDK, Java, then you can change\n  `ANDROID_PLATFORM` and `ANDROID_BUILD_TOOL_VERSION` in\n  `tools/build-amber-sample.sh`.\n* Set up Android SDK path by running\n  `export ANDROID_SDK_HOME=path/to/Android/SDK` in your shell.\n* Set up Android NDK path by running\n  `export ANDROID_NDK_HOME=path/to/Android/NDK` in your shell.\n* Generate a KeyStore using `keytool` command and set up `KEY_STORE_PATH`\n  env variable for the KeyStore file path.\n* Run `./tools/build-amber-sample.sh [build output directory path]`.\n\n#### Android plain executable\n\nIt is possible to obtain a plain executable for Android, as opposed to an APK,\nwith the following:\n\n```\ngit clone https://github.com/google/amber.git\ncd amber\n./tools/git-sync-deps\n\n./tools/update_build_version.py . samples/ third_party/\n./tools/update_vk_wrappers.py . .\n\nmkdir build\ncd build\nmkdir app\nmkdir libs\n${ANDROID_NDK_HOME}/ndk-build -C ../samples NDK_PROJECT_PATH=. NDK_LIBS_OUT=`pwd`/libs NDK_APP_OUT=`pwd`/app\n```\n\nThe list of target ABIs can be configured in `samples/jni/Application.mk` by\nediting the APP_ABI entry:\n\n```\nAPP_ABI := arm64-v8a armeabi-v7a x86 x86_64\n```\n\nThe resulting executable will be produced as\n`build/app/local/\u003cabi\u003e/amber_ndk`. This executable can be run via the adb shell\non your device, e.g. under `/data/local/tmp` (`/sdcard` is generally not\nsuitable because it is mounted with a non-executable flag). Also, vulkan layers\nmay not be available to this executable as it is not an app, so make sure to use\nthe `-d` flag to disable Vulkan layers:\n\n```\nadb push build/app/local/\u003cabi\u003e/amber_ndk /data/local/tmp\nadb shell\n# Now on device shell\ncd /data/local/tmp\n./amber_ndk -d \u003cshader-test-files\u003e\n```\n\n### ChromeOS plain executable (not officially supported)\n\nIt is possible to obtain produce a cross compiled amber binary for ChromeOS.\nStart with the standard amber checkout\n```\ngit clone https://github.com/google/amber.git\ncd amber\n./tools/git-sync-deps\n./tools/update_build_version.py . samples/ third_party/\n./tools/update_vk_wrappers.py . .\n```\n\nThen add the cmake cross compiling variable to the root amber /CMakeLists.txt\n\nThe example ChromeOS platform used here is trogdor.\n\n```\n# Top of CMakeLists.txt file \ncmake_minimum_required(VERSION 3.13)\n\nset(CMAKE_SYSTEM_NAME Linux)\n# The example processor here is 64 bit arm\nset(CMAKE_SYSTEM_PROCESSOR aarch64)\n\nset(CMAKE_SYSROOT \"$ENV{HOME}/chromium/src/build/cros_cache/chrome-sdk/symlinks/trogdor+16074.0.0-1064250+sysroot_chromeos-base_chromeos-chrome.tar.xz/\")\n\nset(tools \"$ENV{HOME}/chromium/src/build/cros_cache/chrome-sdk/symlinks/trogdor+16074.0.0-1064250+target_toolchain\")\nset(CMAKE_C_COMPILER ${tools}/bin/aarch64-cros-linux-gnu-gcc)\nset(CMAKE_CXX_COMPILER ${tools}/bin/aarch64-cros-linux-gnu-g++)\n\nset(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\nset(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)\nset(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)\nset(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)\n# To avoid having the host try to execute a cross compiled binary 'asm_offset'\nset(USE_GAS OFF)\n\n```\nWe statically link c++ to avoid missing libstdc++.so.X \n\nReplace these lines\n```\n  if (NOT ${AMBER_ENABLE_SHARED_CRT})\n    # For MinGW cross compile, statically link to the C++ runtime.\n    # But it still depends on MSVCRT.dll.\n    if (${CMAKE_SYSTEM_NAME} STREQUAL \"Windows\")\n      if (${CMAKE_CXX_COMPILER_ID} STREQUAL \"GNU\")\n\tset_target_properties(${TARGET} PROPERTIES LINK_FLAGS\n\t  -static\n\t  -static-libgcc\n\t  -static-libstdc++)\n      endif()\n    endif()\n  endif()\n\n```\nWith this line.\n```\n\tset_target_properties(${TARGET} PROPERTIES LINK_FLAGS -static-libstdc++)\n```\n\nFinally we can build and deploy the amber binary.\n\n```\nmkdir -p out/Debug\ncd out/Debug\ncmake -GNinja ../..  -DAMBER_USE_LOCAL_VULKAN=1  \nninja amber\n# Copy over the amber binary to the DUT (note the root disk partion has limited space)\nscp amber device:/root/amber\n# An example of how to copy over some amber scripts\nscp ../../tests/cases/* device:/root/\n\n```\nNow by ssh-ing into the DUT you can locally run any amber script. Also, vulkan layers\nmay not be available to this executable, so make sure to use the `-d` flag to disable\nVulkan layers.\n\n### Optional components\n\nThe components which build up Amber can be enabled or disabled as needed. Any\noption with `_SKIP_` in the name is on by default, any with `_USE_` is off by\ndefault.\n\nThe available flags which can be defined are:\n * AMBER_SKIP_TESTS -- Skip building Amber unit tests\n * AMBER_SKIP_SAMPLES -- Skip building the Amber sample applications\n * AMBER_SKIP_SPIRV_TOOLS -- Disable the SPIRV-Tools integration\n * AMBER_SKIP_SHADERC -- Disable the ShaderC integration\n * AMBER_SKIP_LODEPNG -- Disable the LodePNG integration\n * AMBER_USE_DXC -- Enables DXC as a shader compiler\n * AMBER_USE_LOCAL_VULKAN -- Does not try to find the Vulkan SDK, builds needed\n                             components locally\n * AMBER_USE_CLSPV -- Enables CLSPV as a shader compiler\n * AMBER_USE_SWIFTSHADER -- Builds Swiftshader so it can be used as a Vulkan ICD\n\n```\ncmake -DAMBER_SKIP_TESTS=True -DAMBER_SKIP_SPIRV_TOOLS=True -GNinja ../..\n```\n\n#### DXC\n\nDXC can be enabled in Amber by adding the `-DAMBER_USE_DXC=true` flag when\nrunning cmake.\n\n## Build Bots\n\nThere are a number of build bots to verify Amber continues to compile and run\non the various targets. Due to bot limitations, the integration tests are not\nbeing run on the bots, just the unit tests.\n\n## Backends\n\nAmber is designed to run against different graphics APIs.\nAmber will build if no graphics API is found, but will only allow verifying the\nsyntax of the amber script files.\n\nCurrently the Vulkan and Dawn graphics APIs are supported.\n\n### Using Vulkan as a backend\n\nA Vulkan implementation is found by CMake in the following priority order:\n\n * If `AMBER_USE_LOCAL_VULKAN` is enable the headers, loader and layers will be\n   built locally and not found on the system.\n * If an enclosing CMake project includes the\n   [Vulkan-Headers][Vulkan-Headers]\n   CMake project, then headers will be picked up from there.\n\n   In this case the CMake variable `Vulkan_LIBRARIES` can name the\n   Vulkan library, or a default of `vulkan` will be used.\n\n * If you have CMake 3.7 or later, then the Vulkan implementation will\n   be found from a Vulkan SDK as published by LunarG.\n\n   Environment variables:\n   * `VULKAN_SDK` should point to the platform-specific SDK directory\n     that contains the `include` and `lib` directories.\n   * `VK_ICD_FILENAMES` should point to the ICD JSON file.\n   * `VK_LAYER_PATH` should point to the explicit\\_layer.d folder.\n   * `LD_LIBRARY_PATH` must contain the $VULKAN_SDK/lib/ folder for the\n     validation libraries.\n\n   ```\n   export VULKAN_SDK=$HOME/vulkan-macos-1.1.85.0/macOS\n   export VK_ICD_FILENAMES=$VULKAN_SDK/etc/vulkan/icd.d/MoltenVK_icd.json\n   export VK_LAYER_PATH=$VULKAN_SDK/etc/vulkan/explicit_layer.d\n   export LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH\n   ```\n\n### Using Dawn as a backend\n\nWe assume you have built [Dawn][Dawn] from source, and have access to both the\nsource and build trees. To build a Dawn backend for Amber, build Dawn\nas a monolithic shared library with `-DDAWN_BUILD_MONOLITHIC_LIBRARY=ON`. Then\nwhen configuring Amber, set the following CMake variables:\n\n  * `Dawn_INCLUDE_DIR`: The directory containing `webgpu/webgpu.h`\n    (e.g., `\u003cdawn_src\u003e/include`).\n  * `Dawn_GEN_INCLUDE_DIR`: The directory containing generated headers like\n    `dawn/webgpu_cpp.h` (e.g., `\u003cdawn_out\u003e/gen/include`).\n  * `Dawn_LIBRARY_DIR`: The directory containing the `webgpu_dawn` library\n    (e.g., `\u003cdawn_out\u003e`).\n\n### Using SwiftShader as a backend\n\nSwiftShader, if available, can be used by by exporting the `VK_ICD_FILENAMES`\nenvironment variable and using it directly. If SwiftShader is not installed it\ncan be built with Amber by setting `AMBER_ENABLE_SWIFTSHADER` during the\nconfigure step of CMake.\n\n\n```\nmkdir out/sw\ncd out/sw\ncmake -GNinja -DAMBER_ENABLE_SWIFTSHADER=TRUE ../..\nninja\nexport VK_ICD_FILENAMES=$PWD/Linux/vk_swiftshader_icd.json\n./amber -d -V    # Should see SwiftShader listed as device\n./amber -d ../../tests/cases/clear.amber\n```\n\n## Amber Samples\n\nThe build will generate an `out/Debug/amber` executable which can be used to\nrun amber scripts. The script can be used as\n`out/Debug/amber \u003cpath to amber file\u003e`.\n\n```\nout/Debug/amber tests/cases/clear.amber\n```\n\nThe sample app returns a value of 0 on success or non-zero on error. Any issues\nencountered should be displayed on the console.\n\nRun `out/Debug/amber -h` to see a description of the program's command line options.\n\nExample AmberScript files can be found in the [tests/cases](tests/cases)\ndirectory in this repository.\nAlso the [Vulkan Conformance Test\nSuite](https://github.com/KhronosGroup/VK-GL-CTS) contains many real-world\nexamples in its\n[external/vulkancts/data/vulkan/amber](https://github.com/KhronosGroup/VK-GL-CTS/tree/master/external/vulkancts/data/vulkan/amber)\nsubdirectory.\n\nBy default, `out/Debug/amber` supports saving the output image into '.png'\nfile. You can disable this by passing `-DAMBER_SKIP_LODEPNG=true` to cmake.\n\nThe `image_diff` program will also be created. This allows comparing two images\nusing the Amber buffer comparison methods.\n\n## Contributing\n\nPlease see the [CONTRIBUTING](CONTRIBUTING.md) and\n[CODE_OF_CONDUCT](CODE_OF_CONDUCT.md) files on how to contribute to Amber.\n\n\n## References\n[Dawn]: https://dawn.googlesource.com/dawn/\n[Talvos]: https://talvos.github.io/\n[Vulkan-Headers]: https://github.com/KhronosGroup/Vulkan-Headers\n[VkRunner]: https://github.com/igalia/vkrunner\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Famber","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Famber","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Famber/lists"}